執行DBMS_LOB包LOADCLOBFROMFILE過程出現ORA-6502錯誤
嘗試透過DBMS_LOB包的LOADCLOBFROMFILE過程從作業系統向CLOB中載入資料,沒想到碰到了錯誤。
執行的SQL語句如下:
SQL> CREATE TABLE T
2 (
3 ID NUMBER,
4 NAME VARCHAR2(30),
5 CONTENTS CLOB,
6 CONSTRAINT PK_T PRIMARY KEY (ID)
7 );
表已建立。
SQL> INSERT INTO T
2 VALUES (1, 'ABC', 'TEST');
已建立 1 行。
SQL> DECLARE
2 V_LOB CLOB;
3 V_FILE BFILE := BFILENAME('D_OUTPUT', 'streams_doc.txt');
4 V_SOURCE NUMBER := 1;
5 V_DEST NUMBER := 1;
6 V_LANG NUMBER;
7 V_WARN NUMBER;
8 BEGIN
9 UPDATE T SET CONTENTS = EMPTY_CLOB RETURN CONTENTS INTO V_LOB;
10 DBMS_LOB.FILEOPEN(V_FILE);
11 DBMS_LOB.OPEN(V_LOB, DBMS_LOB.LOB_READWRITE);
12 DBMS_LOB.LOADCLOBFROMFILE(V_LOB,
13 V_FILE,
14 DBMS_LOB.LOBMAXSIZE,
15 V_DEST,
16 V_SOURCE,
17 NULL,
18 V_LANG,
19 V_WARN);
20 DBMS_LOB.CLOSE(V_LOB);
21 DBMS_LOB.FILECLOSEALL;
22 COMMIT;
23 END;
24 /
DECLARE
*
第 1 行出現錯誤:
ORA-06502: PL/SQL: 數字或值錯誤
ORA-06512: 在 "SYS.DBMS_LOB", line 890
ORA-06512: 在 line 12
這個錯誤發生在DBMS_LOB包中的某處,一般來說這種錯誤是不可控的。因為DBMS_LOB包是經過WRAP工具加密的,既沒有辦法看到程式碼,也沒有辦法跟蹤。
考慮再三,認為問題可能是由於輸入引數有誤造成的,再次仔細的閱讀文件,發現bfile_csid和lang_context引數的輸入值應為0,而不是NULL:
SQL> DECLARE
2 V_LOB CLOB;
3 V_FILE BFILE := BFILENAME('D_OUTPUT', 'streams_doc.txt');
4 V_SOURCE NUMBER := 1;
5 V_DEST NUMBER := 1;
6 V_LANG NUMBER := 0;
7 V_WARN NUMBER;
8 BEGIN
9 UPDATE T SET CONTENTS = EMPTY_CLOB RETURN CONTENTS INTO V_LOB;
10 DBMS_LOB.FILEOPEN(V_FILE);
11 DBMS_LOB.OPEN(V_LOB, DBMS_LOB.LOB_READWRITE);
12 DBMS_LOB.LOADCLOBFROMFILE(V_LOB,
13 V_FILE,
14 DBMS_LOB.LOBMAXSIZE,
15 V_DEST,
16 V_SOURCE,
17 0,
18 V_LANG,
19 V_WARN);
20 DBMS_LOB.CLOSE(V_LOB);
21 DBMS_LOB.FILECLOSEALL;
22 COMMIT;
23 END;
24 /
PL/SQL 過程已成功完成。
SQL> SELECT ID, NAME, DBMS_LOB.SUBSTR(CONTENTS, 20, 1) CONTENTS
2 FROM T;
ID NAME CONTENTS
---------- ------------------------------ --------------------------------------------------
1 ABC If one or more mater
雖然問題是由於閱讀文件不仔細造成的,但是Oracle的包也存在問題,它沒有進行最起碼的輸入引數範圍的驗證,也沒有丟擲一個具有可讀性的錯誤資訊。而且由於沒有提供原始碼,含混的錯誤資訊使得除錯和診斷工作變得異常困難,即使這不算是Oracle的bug,也是Oracle做的不足之處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-624376/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行AWR報告出現ORA-6502錯誤
- 執行遠端DBMS_LOB包中過程
- 執行Bex 出現 61704 錯誤
- 執行jdonMVC示例出現了錯誤MVC
- DBMS_LOB包LOADFROMFILE過程載入CLOB亂碼
- JAVA儲存過程出現ORA-24345錯誤Java儲存過程
- 通過dbms_scheduler執行一個外部job時出現錯誤
- JDBC執行出現ORA-17410錯誤JDBC
- mysql執行函式出現1418錯誤MySql函式
- 卡巴斯機 任務執行時出現錯誤
- centos7 執行firewall-cmd --state出現錯誤CentOS
- 執行一個專案中間報錯裝包過程記錄
- 執行ocrconfig replace ocrmirror出現PROT-22錯誤
- 執行ocrconfig replace ocr出現PROT-16錯誤
- 執行csscan出現loading shared libraries錯誤CSS
- ubuntu7下軟體執行出現segment fault錯誤Ubuntu
- 自定義msi安裝包的執行過程
- 遷移過程中出現的open failed錯誤AI
- 檢視執行計劃出現ORA-22992錯誤
- 執行錯誤集
- sql 執行過程SQL
- 執行impdp時出現ORA-39154錯誤的解決案例
- Log4J執行時出現的java.lang.VerifyError錯誤JavaError
- Eclipse中執行出現selection does not contain a main type錯誤EclipseAI
- jdon執行一段時間後經常出現的錯誤
- Laravel Phpunit使用的過程中,Class內多個function,執行時發生錯誤LaravelPHPFunction
- DBMS_STATS.GATHER_SCHEMA_STATS執行過程中遭遇ORA-01476錯誤
- GetDlgItem() 出現錯誤Git
- 手動建庫過程錯誤
- eclipse 打war包後執行時報 cas.client 錯誤Eclipseclient
- Qt 載入 libjpeg 庫出現“長跳轉已經執行”錯誤QT
- db2執行建立存貯過程報錯SQL0104N,即語法錯誤DB2SQL
- sql執行過程分析SQL
- Oracle DDL 執行過程Oracle
- Java 程式執行過程Java
- 指令的執行過程
- Jive執行出錯!
- Python: 安裝 sklearn 包出現錯誤的解決方法Python