使用Oracle SQL Loader加载CLOB遇ORA-39777错误的解决方案咨询
解决ORA-39777:SQL Loader加载CLOB列失败的方案
针对你遇到的SQL Loader加载CLOB列时触发的ORA-39777错误,结合无法合并输入文件的限制,提供两种可行的解决方式:
方案1:调整SQL Loader控制文件的列定义
原控制文件中将CLOB类型的目标列LM_CAUTION_NOTE定义为CHAR(7000),这是触发错误的核心原因——SQL Loader在多文件场景下,用CHAR类型映射CLOB列会触发LOB加载限制。直接将列类型改为CLOB即可解决:
修改后的控制文件:
LOAD DATA CHARACTERSET UTF8 INFILE "E:\sample1.txt" INFILE "E:\sample2.txt" APPEND INTO TABLE FBNK_CUST_CAUTION_NOTE_M1 FIELDS TERMINATED BY ';' ENCLOSED BY '~%' TRAILING NULLCOLS ( code CHAR(240), LM_CAUTION_NOTE CLOB )
如果LM_CAUTION_NOTE字段内容包含换行(单条记录跨多行),需额外添加CONTINUEIF子句标识记录延续,比如假设下一行开头是字段包围符~%则视为当前记录的延续:
LOAD DATA CHARACTERSET UTF8 INFILE "E:\sample1.txt" INFILE "E:\sample2.txt" CONTINUEIF NEXT (1:2) = '~%' -- 根据实际数据格式调整匹配规则 APPEND INTO TABLE FBNK_CUST_CAUTION_NOTE_M1 FIELDS TERMINATED BY ';' ENCLOSED BY '~%' TRAILING NULLCOLS ( code CHAR(240), LM_CAUTION_NOTE CLOB )
方案2:使用Oracle外部表加载
外部表通过Oracle Loader驱动直接读取文本文件,对多文件、CLOB列的支持更稳定,步骤如下:
- 创建目录对象并授权(替换
YOUR_USER为你的数据库用户):
CREATE DIRECTORY DATA_DIR AS 'E:\'; GRANT READ ON DIRECTORY DATA_DIR TO YOUR_USER;
- 创建外部表,匹配输入文件格式:
CREATE TABLE EXT_FBNK_CUST_CAUTION_NOTE_M1 ( code VARCHAR2(240), LM_CAUTION_NOTE CLOB ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY DATA_DIR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET UTF8 FIELDS TERMINATED BY ';' ENCLOSED BY '~%' TRAILING NULLCOLS ( code CHAR(240), LM_CAUTION_NOTE CLOB ) ) LOCATION ('sample1.txt', 'sample2.txt') ) PARALLEL 5 REJECT LIMIT UNLIMITED;
- 将外部表数据插入目标表:
INSERT /*+ APPEND */ INTO FBNK_CUST_CAUTION_NOTE_M1 SELECT code, LM_CAUTION_NOTE FROM EXT_FBNK_CUST_CAUTION_NOTE_M1; COMMIT;
若输入文件中存在跨多行的CLOB字段,需调整RECORDS DELIMITED BY规则,比如用特定的记录结束标识(如END_RECORD)替代NEWLINE。
内容的提问来源于stack exchange,提问作者Karthick88it
相关产品推荐
相关产品推荐

