【问题标题】:SQL*Loader WHEN clause beyond end-of-recordSQL*Loader WHEN 子句超出记录结尾
【发布时间】:2013-11-12 10:05:31
【问题描述】:

如果给定位置存在值,我使用以下语法加载表:

INTO TABLE some_table
WHEN (2745:2769) <> BLANKS
( ... fields specification ... )

当值实际存在(记录已加载)和该位置有空格(未加载)时,它可以工作。但是,当行短于 2745 个字符时,仍会加载记录,这是不可取的。我怎样才能防止这种情况发生?

我尝试了以下所有方法,但都是一样的:

WHEN (2745:2769) <> BLANKS
WHEN (2745:2769) <> ''
WHEN (2745:2769) <> ' '
WHEN (2745:2769) IS NOT NULL (this doesn't work at all actually)

【问题讨论】:

    标签: oracle etl sql-loader


    【解决方案1】:

    尝试使用临时表将所有数据加载到其中。然后使用通用将数据从临时表传输到表中 insert into ... select * from temporary table where column is not null;

    Oracle 加载器并不是真正尝试对数据文件进行操作/子句等的最佳位置。而是在尝试加载文件之前确保文件尽可能正确(即通过 perl 解析器或之前的东西运行它),或者加载到临时表中,从临时表到最终表进行操作。

    【讨论】:

    • 对,后处理只是一种“IS NOT NULL”条件。我只是觉得我错过了一些东西,这样的过滤在加载过程中似乎很简单。但是好吧... SQL*Loader 很烂...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 2020-08-23
    • 2011-04-21
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多