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

时间:2015-04-29 07:10:04

标签: oracle11g oracle-sqldeveloper

我有一个包含10lacs记录的数据文件(.csv)。我使用oracle SQL LOADER和控制文件概念将文件数据上传到我的表TBL_UPLOADED_DATA。

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

现在我的要求是我想根据某些标准仅上传相关数据。

例如我有表EMPLOYEE,其列是EMPID,EMPNAME,REMARKS,EMPSTATUS

我有一个包含员工数据的数据文件,我需要将其上传到EMPLOYEE表中。 在这里我想限制一些不应该使用sql loader上传到EMPLOYEE表的数据。假设限制标准类似于REMARKS不应包含'NO'且EMPSTATUS不应包含'00'。

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

1 个答案:

答案 0 :(得分:0)

您可以use the WHEN syntax根据某些逻辑选择包含或排除记录,但您只能使用=!=<>运算符,因此它不能满足你的需要。如果您的状态字段是两个字符,那么您可以使用以下内容强制执行该部分:

...
INTO TABLE employee
WHEN (EMPSTATUS != '00')
FIELDS ...

...然后将使用00作为最后一个字段的记录被拒绝,日志显示如下:

  1 Row not loaded because all WHEN clauses were failed.

您可以使用相同的方法拒绝备注仅为'NO'的记录 - 这是该字段的全部内容:

WHEN (REMARKS != 'NO') AND (EMPSTATUS != '00')

...但不是包含NO的较长值的地方。它并不完全清楚你想要的。

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