sqlldr - 跳过空值为

时间:2016-09-08 11:00:15

标签: sql-loader

我需要将分隔文件中的数据加载到Oracle 12c。

我的Ctl文件如下所示:

OPTIONS (skip=2,rows=1000, bindsize=100000, readsize=100000, discardmax=1, silent=header,feedback)
load data
CHARACTERSET UTF8
insert into table XYZ
WHEN FIELD2 <> ''
fields terminated by '^' optionally enclosed by ','
trailing nullcols
(
FIELD1 filler,
FIELD2,
FIELD3,
MODIFIED_DATE "SYSDATE"
)

在我的数据文件中,我期待至少一行为FIELD2&amp; FIELD3。

假设我的数据文件是:

  

ABC DEF ^ ^ GHI

     

ABC ^^

我的第二条记录按预期被丢弃,并带有以下消息:

  

已成功加载1行。

     

0由于数据错误而未加载行。

     

未加载1行,因为所有WHEN子句都失败了。

     

0未加载行,因为所有字段都为空。

但是,sqlldr退出代码仍为2,导致我的脚本失败。 有没有办法加载有效记录(FIELD2的行不为空)&amp;优雅成功退出?

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

任何失败的WHEN条件都会导致sqlldr退出非零,正如您所发现的那样。

您需要:

  • 在加载

  • 之前预处理文件并删除那些带有NULL字段的行
  • 将所有记录加载到表中,然后删除具有NULL的记录 第二栏

  • 将所有记录加载到临时表中,然后选择所需的行 进入主表

  • 使用外部表格,然后在主页面中选择所需的行 表

每种方法都有其优点和缺点,因此您必须进行一些研究,看看哪种方法最适合您的情况。