sqlldr - 跳过具有空值的行

sqlldr - skip lines with null values

我需要将数据从分隔文件加载到 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 和 FIELD3 至少有一行为 NULL。

假设我的数据文件是:

ABC^DEF^GHI

ABC^^

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

1 Row successfully loaded.

0 Rows not loaded due to data errors.

1 Row not loaded because all WHEN clauses were failed.

0 Rows not loaded because all fields were null.

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

非常感谢任何帮助。

谢谢。

如您所见,任何失败的 WHEN 条件都会导致 sqlldr 以非零值退出。

您需要:

  • 预处理文件并在加载前删除那些带有 NULL 字段的行

  • 将所有记录加载到您的 table 然后删除带有 NULL
    的记录 第二列

  • 将所有记录加载到暂存中 table 然后 select 您想要的行
    进入主要 table

  • 使用外部 table 和 select 将您想要的行放入主
    table

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