【问题标题】:sqlldr - skip lines with null valuessqlldr - 跳过空值的行
【发布时间】:2016-09-08 11:00:15
【问题描述】:

我需要将数据从分隔文件加载到 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 行已成功加载。

0 行因数据错误而未加载。

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

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

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

非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 假设我的数据文件是:ABC^DEF^GHI ABC^^

标签: sql-loader


【解决方案1】:

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

您需要:

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

  • 将所有记录加载到表中,然后删除带有 NULL 的记录
    第二栏

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

  • 使用外部表并选择所需的行进入主表

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

【讨论】:

  • 感谢您的建议。我最终对文件进行了预处理然后加载。
猜你喜欢
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多