oracle - 在 TERMINATED 和 ENCLOSED 字段后未找到终止符

标签 oracle sql-loader

我正在尝试使用 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/

相关文章:

import - 如何使用SQLDeveloper导入 "loader"格式数据?

sql - 如何从 Oracle SQL 中的科学计数法转换?

oracle - 在 SQL*Loader 控制文件中设置日期格式

oracle - SQL*Loader : Dealing with delimiter characters in data

java - 如何在 sqlldr ctl 文件中设置主键?

c# - ASP.NET 和 Oracle 存储过程错误

java - Java 预准备语句的 Oracle 错误 "SQL command not properly ended"(ORA-00933)

sql - 创建仅在创建新表时运行的触发器

oracle - 为 JOOQ 查询设置默认 fetchSize

java - 插入记录时触发器无效且重新验证失败错误