我有一个包含10lacs记录的数据文件(.csv)。我使用oracle SQL LOADER和控制文件概念将文件数据上传到我的表TBL_UPLOADED_DATA。
我能够顺利地将文件中的所有数据上传到表格而没有任何问题。
现在我的要求是我想根据某些标准仅上传相关数据。
例如我有表EMPLOYEE,其列是EMPID,EMPNAME,REMARKS,EMPSTATUS
我有一个包含员工数据的数据文件,我需要将其上传到EMPLOYEE表中。 在这里我想限制一些不应该使用sql loader上传到EMPLOYEE表的数据。假设限制标准类似于REMARKS不应包含'NO'且EMPSTATUS不应包含'00'。
我该如何实现呢。请建议在控制文件中进行哪些更改。
答案 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,然后根据这些条件选择性地插入到您的真实表中。