SQL * Loader WHEN子句超出记录结束

时间:2013-11-12 10:05:31

标签: oracle etl sql-loader

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

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)

1 个答案:

答案 0 :(得分:1)

尝试使用临时表将所有数据加载到。然后使用泛型将临时表中的数据传输到表中      insert into ... select * from临时表,其中column不为null;

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