Oracle Sqlldr加载含CRLF列的|分隔文件失败,求CTL配置方法
解决SQL*Loader加载含CRLF字段的|分隔文件问题
问题根源:SQL*Loader默认将CR/LF识别为行终止符,导致字段内部的换行被误判为行结束,进而加载失败。SQL Developer能成功导入是因为它支持自动识别多种行终止符(CRLF、CR、LF)并正确解析字段内的换行。
CTL文件配置方案:
指定多类型行终止符
使用RECORDS DELIMITED BY ANY OF参数,同时匹配CRLF、CR、LF三种行终止符,语法如下:RECORDS DELIMITED BY ANY OF x'0D0A' x'0D' x'0A'其中
x'0D0A'对应CRLF,x'0D'对应CR,x'0A'对应LF,ANY OF表示任意一种匹配即视为行结束。完整CTL示例
结合字段分隔符与可选包裹符(如果字段含特殊字符),完整配置如下:LOAD DATA INFILE 'target_file.txt' BADFILE 'target_file.bad' DISCARDFILE 'target_file.dsc' INTO TABLE your_target_table RECORDS DELIMITED BY ANY OF x'0D0A' x'0D' x'0A' FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' ( col1 VARCHAR2(100), col2 CLOB, -- 存储含换行的长文本用CLOB更稳妥 col3 NUMBER )
注意事项:
- 如果字段内容被双引号等字符包裹,必须添加
OPTIONALLY ENCLOSED BY,否则SQL*Loader仍会把包裹内的换行当成行终止符。 - 对应表字段要选择合适类型,含换行的长文本优先用
CLOB,避免VARCHAR2长度不足导致截断。
- 如果字段内容被双引号等字符包裹,必须添加
内容的提问来源于stack exchange,提问作者Darrell
相关产品推荐
相关产品推荐

