Oracle SQL*Loader WHEN子句超出记录末尾

Oracle SQL*Loader WHEN子句超出记录末尾,oracle,etl,sql-loader,Oracle,Etl,Sql Loader,如果给定位置存在值,我将使用以下语法加载表: INTO TABLE some_table WHEN (2745:2769) <> BLANKS ( ... fields specification ... ) 进入某个表 当(2745:2769)空白时 (…字段规范…) 当值实际存在(记录已加载)且此位置存在空格(未加载)时,此选项起作用。但是,当行短于2745个字符时,仍会加载记录,这是不可取的。我怎样才能防止这种情况 我尝试了以下所有方法,结果都是一样的: WHEN (274

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

INTO TABLE some_table
WHEN (2745:2769) <> BLANKS
( ... fields specification ... )
进入某个表
当(2745:2769)空白时
(…字段规范…)
当值实际存在(记录已加载)且此位置存在空格(未加载)时,此选项起作用。但是,当行短于2745个字符时,仍会加载记录,这是不可取的。我怎样才能防止这种情况

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

WHEN (2745:2769) <> BLANKS
WHEN (2745:2769) <> ''
WHEN (2745:2769) <> ' '
WHEN (2745:2769) IS NOT NULL (this doesn't work at all actually)
当(2745:2769)空白时
当(2745:2769)'
当(2745:2769)'
当(2745:2769)不为NULL时(实际上根本不起作用)

尝试使用临时表将所有数据加载到。然后使用泛型函数将数据从临时表传输到表中 插入到。。。从列不为空的临时表中选择*


Oracle加载程序并不是尝试对数据文件执行操作/子句等的最佳位置。相反,在尝试加载文件(即之前通过perl解析器或其他方法运行文件)或加载到临时表之前,请确保文件尽可能正确。从临时表到最终表进行操作。

对,后处理只是一个“不为空”条件。我只是觉得我遗漏了一些东西,这样的过滤在加载过程中似乎非常简单。但是。。。SQL*加载程序太糟糕了。。。