我正在尝试加载一个文本文件,只有那些第三列'c_nbr'不以'ABCD'结尾的行。由于WHEN子句非常原始,我无法使用它,trim / substring。
我的第二个选择是将c_nbr字段的最后4个字符放到名为“MSGCOL”的列中,并在我的WHEN子句中使用该列,例如“WHEN MSGCOL<>'ABCD'”。
MSGCOL获得值“ABCD”,其中列'c_nbr'以“ABCD”结尾,但WHEN子句不是DISCARD它们。
为什么它不起作用?我怎样才能实现目标?我可以从sqlldr控制文件本身运行SQL查询吗?比如“从tbl_load中删除,其中c_nbr喜欢'%ABCD';”在加载命令结束时?
SQLLDR控制文件: -
OPTIONS (ERRORS=9999)
LOAD DATA
INFILE '052140.csv'
BADFILE '052140.BAD'
DISCARDFILE '052140.DIS'
INFILE '055913.csv'
BADFILE '055913.BAD'
DISCARDFILE '055913.DIS'
APPEND INTO TABLE tbl_load
WHEN MSGCOL <> 'ABCD'
FIELDS TERMINATED BY ',' optionally enclosed by '"' trailing nullcols
(
id "TRIM(UPPER(:ID))",
pid,
c_nbr "TRIM(:c_nbr)",
a_nbr "SUBSTR(TRIM(:a_nbr), 1, 25)",
P_REASON2 FILLER,
MSGCOL EXPRESSION "substr(trim(:c_nbr), length(trim(:c_nbr))-3, 4)"
)