You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sqlldr基于位置加载时,如何将超长行导入坏文件而非截断插入

解决SQL*Loader超长行不截断直接拒绝的问题

要让超长行直接进入坏文件而非被截断插入,有两种常用方法,根据你的场景推荐第一种:

方法一:使用固定长度加载(最直接)

修改控制文件的INFILE行,添加FIX 15参数,强制要求每行必须是15个字符(对应你定义的3列总长度),长度不符的行直接被拒绝到坏文件:

LOAD DATA
INFILE 'sample.txt' FIX 15
REPLACE INTO TABLE t1
(col1 POSITION(1:5),
 col2 POSITION(6:10),
 col3 POSITION(11:15)
)
  • 原理:FIX n指定输入文件每行固定为n字节,SQL*Loader会自动拒绝长度不等于n的行,这些行默认写入与输入文件同名的.bad文件(比如sample.bad)。
  • 注意:此方法同时会拒绝长度不足15的行,如果需要允许短行仅拒绝超长行,可使用第二种方法。

方法二:检查记录长度(灵活适配可变长度场景)

通过定义虚拟列获取整个记录的长度,添加WHEN子句过滤长度超过15的行:

LOAD DATA
INFILE 'sample.txt'
REPLACE INTO TABLE t1
WHEN (record_length <= 15)
(col1 POSITION(1:5),
 col2 POSITION(6:10),
 col3 POSITION(11:15),
 -- 定义虚拟列获取整个记录的长度
 record_length EXPRESSION "LENGTH(:full_record)",
 full_record POSITION(1:MAX) CHAR
)
  • 原理:POSITION(1:MAX)获取整行内容,通过LENGTH()函数计算长度,WHEN子句只允许长度≤15的行插入,超长行被拒绝到坏文件。

内容的提问来源于stack exchange,提问作者Albin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:54:22