【发布时间】:2018-07-09 07:05:39
【问题描述】:
我正在尝试使用 SQL 加载器通过控制文件将包含多字节(特殊)字符的记录很少的文件加载到 Oracle 表中。但是如果我使用下面的控制文件,它会给我多字节字符错误。
LOAD DATA
CHARACTERSET UTF8
INTO TABLE MY_DB.T1
(
MESSAGE BOUNDFILLER POSITION(437:515) CHAR,
FILLER ":MESSAGE",
MY_DTE DATE "DDMMYYYYHH24MISS" "CASE WHEN 1=1 THEN NULL ELSE NULL END",
XTRA_TXT POSITION(516:755) CHAR
)
特殊字符在530的位置。
在其他情况下,当我将 FILLER 字段放置在 MY_DTE 字段之后的控制文件末尾而不进行任何其他更改时,记录已成功加载。
另外,如果我保持控制文件原样并在特殊字符位置(530)之前添加任何字符,那么记录也会成功加载。
我不确定真正导致问题的原因。 PS- 表中字段FILLER的类型为VARCHAR2(79 BYTE)。
【问题讨论】:
-
您收到的实际错误信息是什么?还有什么是 DB 字符集,在 516:755 位置实际有多少个字符和多少个字节?
-
在日志中我可以找到错误为:RECORD 616 : Rejected - Error on table My_DB.T1, column MY_DTE。
-
另外,表 NLS_DATABASE_PARAMETERS 中的 NLS_CHARACTERSET 是 UTF8 而 NLS_LANGUAGE 是 AMERICAN
-
@AlexPoole 从 516 开始的字符看起来像:REBATE JAN 17 â DEC 17 .....剩余空间直到第 755 个字符
-
您是在 Windows 还是 Linux 上工作?我假设文件实际上保存为 UTF-8?
标签: oracle sql-loader