Oracle SQL*Loader处理NULL值:COLUMN6为空时插入COLUMN4值可行吗?
SQL*Loader实现NULL字段替换需求的方案
可以实现,SQL*Loader支持在字段映射中使用Oracle内置函数或表达式处理这类NULL值替换逻辑。只需修改控制文件中COLUMN6的定义,通过NVL函数(或CASE语句)实现当COLUMN6为NULL时复用COLUMN4的值。
修改后的完整控制文件:
OPTIONS (ROWS=1000, READSIZE=2097152, BINDSIZE=2097152, PARALLEL=TRUE) LOAD DATA INFILE '{INFILE}' APPEND INTO TABLE TABLE_NAME WHEN FEED='FEED' FIELDS TERMINATED BY '|' TRAILING NULLCOLS ( COLUMN1 POSITION(1) DECIMAL EXTERNAL, COLUMN2 CHAR(5), COLUMN3 CHAR(11), COLUMN4 CHAR(10), COLUMN5 CHAR(30), COLUMN6 CHAR(30) "NVL(:COLUMN6, :COLUMN4)" )
关键说明:
- 在
COLUMN6的定义后添加双引号包裹的NVL(:COLUMN6, :COLUMN4)表达式,:COLUMN6和:COLUMN4是SQL*Loader对输入字段的引用格式。 NVL函数会判断:COLUMN6是否为NULL:如果是,则返回:COLUMN4的值;否则返回:COLUMN6本身。- 也可使用
CASE语句实现相同逻辑,例如:"CASE WHEN :COLUMN6 IS NULL THEN :COLUMN4 ELSE :COLUMN6 END",效果完全一致。 TRAILING NULLCOLS参数会将输入行末尾缺失的字段设为NULL,确保NVL函数能正确触发替换逻辑。
内容的提问来源于stack exchange,提问作者Venkatesh R
相关产品推荐
相关产品推荐

