Oracle 12cR2 - 我需要将数据从一个数据库移动到另一个数据库。 由于我不会进入的原因,数据将从一个系统转储为CSV文件,然后将其作为具有外部表定义的CSV文件加载到另一个系统中。我遇到的问题与某些数据在其上带有重音标记的“e”(é)有关。
两个数据库都定义为AL32UTF8。源表和目标表的结构相同。当我将数据导出到CSV文件中时,我会在几行中获得é。当我尝试通过外部表导入时,出现以下错误:
KUP-04021: field formatting error for field <field name>
KUP-04037: terminator not found
KUP-04101: record 7476 rejected in file <CSV File Name>
如果我在Notepad ++中打开CSV文件并将'e with accent'(é)更改为标准'e',则导入正常。在现场检查中,出错的每一行都有é。
我很困惑为什么我收到这个错误。我需要定期移动数据。我不想每次都要通过手动数据清理。我原本以为同样的Characterset会阻止这个错误。
如何解决此问题?我的外部表定义是
CREATE TABLE "table_x"
(
"FROM_REF" VARCHAR2(30),
"FY" VARCHAR2(30),
...
"SUPPORT" NUMBER
)
organization external (
type oracle_loader
default directory ext_data_files
access parameters
(
records delimited BY 0x'0A'
CHARACTERSET AL32UTF8
skip 1
BADFILE 'bad_%a_%p.bad'
LOGFILE 'log_%a_%p.log'
fields terminated by ','
optionally enclosed BY '"'
missing field VALUES are NULL
REJECT ROWS WITH ALL NULL FIELDS
)
location ('WS_FY18.csv')
)
reject limit 0;
答案 0 :(得分:1)
您确定文本文件是否保存为正确的UTF8?
也许“é”被保存为扩展ASCII而不是真正的Unicode,但Notepad ++以同样的方式显示它。尝试在导出中使用不属于扩展ASCII的字符,并查看它是否正确显示。或者检查文件的十六进制并验证字符集。