我正在尝试使用 Oracle Sql Loader 实用程序将一些数据加载到 Oracle DB 中,但在以下情况下出现“在 TERMINATED 和 ENCLOSED 字段后未找到终止符”异常:
我的sqlldr控制文件是:
load data
append
into table fp_metadata
fields terminated by "|" optionally enclosed by '"'
TRAILING NULLCOLS
(
TABLE_NAME CHAR(30),
FIELD_NAME CHAR(60),
CURINDICATOR FLOAT,
SPLITINDICATOR CHAR(4),
UNITFACTOR FLOAT,
DESCRIPTION CHAR(450)
)
错误是:
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
TABLE_NAME FIRST 30 | O(") CHARACTER
FIELD_NAME NEXT 60 | O(") CHARACTER
CURINDICATOR NEXT 4 FLOAT
SPLITINDICATOR NEXT 4 | O(") CHARACTER
UNITFACTOR NEXT 4 FLOAT
SQL string for column : "NVL(:UNITFACTOR,NULL)"
DESCRIPTION NEXT 450 | O(") CHARACTER
value used for ROWS parameter changed from 100000 to 65534
Record 16: Rejected - Error on table FP_METADATA, column SPLITINDICATOR.
no terminator found after TERMINATED and ENCLOSED field
错误记录是:
"a"|"zzz"|0|""||"test0"
"b"|"xxx"|0|""||"test1"
"c"|"yyy"|1|"P"|1|"test2" <--! here sqlldr has been failing
更新:
errorneus 输入行的另一个示例是:
"fp_basic_bd"|"p_price"|1|"P"|1|"Price - Closing"
如果我有错误的话,请您指出我的错误吗?
最佳答案
只是从您的错误中猜测,但请尝试删除数据中的双引号或将 1 个双引号更改为 2 个双引号。您可以在控制文件本身中执行此操作。尝试(未经测试):
LOAD DATA
...
(
...
splitindicator nullif splitindicator = blanks "replace(:splitindicator, '"', '""')"
...
)
您应该能够使用以下方法删除双引号:
splitindicator nullif splitindicator = blanks "replace(:splitindicator, '"', '')"
如果这不起作用,您可能需要修复数据文件本身(或者如果数据源来自其他 SQL,则对数据提取使用替换功能)
希望有效
关于oracle - 在 TERMINATED 和 ENCLOSED 字段后未找到终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520631/