Oracle外部表加载报错KUP-04021/KUP-04026求助
Oracle外部表加载CSV时KUP-04021/KUP-04026报错解决方法
问题根源
从日志输出可明确:Oracle Loader默认给所有字段分配了CHAR(255)缓冲区,即便表中LONG_TEXT字段定义为CLOB,加载时仍会被限制在255字符长度内,直接触发KUP-04021(字段格式化错误)和KUP-04026(字段长度超过数据类型限制)报错。
解决方案
1. 显式指定CLOB字段类型
在外部表的ACCESS PARAMETERS字段列表中,必须显式声明LONG_TEXT为CHARACTER LARGE OBJECT(或简写CLOB),也可指定足够大的CHAR长度(如CHAR(32767)),覆盖默认的255字符限制。
修改后的建表语句示例:
create table test( NAME varchar2(4000), STATUS varchar2(4000), LONG_TEXT CLOB) ORGANIZATIONAL EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "TEST_DIRECT" ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE SKIP 1 FIELDS TERMINATED BY ',' MISSING FIELDS VALUES ARE NULL ( NAME CHAR(4000), STATUS CHAR(4000), LONG_TEXT CHARACTER LARGE OBJECT ) )LOCATION ('test.csv' ) REJECT LIMIT UNLIMITED;
2. 处理含分隔符的长文本
若LONG_TEXT内容包含逗号(字段分隔符),需在ACCESS PARAMETERS中添加OPTIONALLY ENCLOSED BY '"'参数,确保被双引号包裹的含逗号文本不会被误解析为多个字段:
ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE SKIP 1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' MISSING FIELDS VALUES ARE NULL ( NAME CHAR(4000), STATUS CHAR(4000), LONG_TEXT CHARACTER LARGE OBJECT ) )
验证
修改后重新加载数据,检查日志是否不再出现字段长度相关报错,确认长文本成功存入CLOB字段。
内容的提问来源于stack exchange,提问作者ravi
相关产品推荐
相关产品推荐

