Oracle SQLLDR使用WHEN子句丢弃行无效

时间:2011-10-12 17:24:57

标签: oracle sql-loader

我正在尝试加载一个文本文件,只有那些第三列'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)"
)

0 个答案:

没有答案