访问/加载外部表时出错 - 由于字符集?

时间:2018-03-16 20:17:05

标签: oracle

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;

1 个答案:

答案 0 :(得分:1)

您确定文本文件是否保存为正确的UTF8?

也许“é”被保存为扩展ASCII而不是真正的Unicode,但Notepad ++以同样的方式显示它。尝试在导出中使用不属于扩展ASCII的字符,并查看它是否正确显示。或者检查文件的十六进制并验证字符集。