Oracle11g 如何在oracle中使用sql loader限制基于某些条件加载数据?

Oracle11g 如何在oracle中使用sql loader限制基于某些条件加载数据?,oracle11g,oracle-sqldeveloper,Oracle11g,Oracle Sqldeveloper,我有一个数据文件.csv,其中包含10lacs记录。我正在使用oracle SQL LOADER和控制文件概念将文件数据上载到我的表TBL_上载的_数据 我能够顺利地将文件中的所有数据上传到表中,没有任何问题 现在我的要求是,我只想上传基于某些标准的相关数据 例如,我有一个EMPLOYEE表,它的列是EMPID、EMPNAME、备注和EMPSTATUS 我有一个包含员工数据的数据文件,需要上传到员工表中。 这里我想限制一些不应该使用sql加载器上传到EMPLOYEE表中的数据。假设限制条件类似于

我有一个数据文件.csv,其中包含10lacs记录。我正在使用oracle SQL LOADER和控制文件概念将文件数据上载到我的表TBL_上载的_数据

我能够顺利地将文件中的所有数据上传到表中,没有任何问题

现在我的要求是,我只想上传基于某些标准的相关数据

例如,我有一个EMPLOYEE表,它的列是EMPID、EMPNAME、备注和EMPSTATUS

我有一个包含员工数据的数据文件,需要上传到员工表中。 这里我想限制一些不应该使用sql加载器上传到EMPLOYEE表中的数据。假设限制条件类似于备注不应包含“否”,EMPSTATUS不应包含“00”

我如何实现这一点。请建议在控制文件中进行哪些更改。

您可以根据某些逻辑选择包括或排除记录,但只能使用=,!=和操作员,所以它不能完全满足您的需要。如果您的状态字段为两个字符,则可以使用以下命令强制执行该部分:

...
INTO TABLE employee
WHEN (EMPSTATUS != '00')
FIELDS ...
。。。然后,最后一个字段为00的记录将被拒绝,日志显示如下内容:

  1 Row not loaded because all WHEN clauses were failed.
您可以使用相同的方法拒绝备注为“否”的记录,即字段的全部内容:

WHEN (REMARKS != 'NO') AND (EMPSTATUS != '00')
。。。但不是在一个较长的值中包含“否”的位置。不完全清楚您想要哪个

但不能使用like或instr之类的函数或正则表达式来提高选择性。如果需要更高级的内容,则需要将数据加载到临时表中,或者使用而不是SQL*Loader,然后根据这些条件选择性地插入到实际表中