SQL LDR导入乱码问题的解决

场景:

业务部门要求导入一批数据,是CSV格式的,大家就想到了EXCEL格式可以打开,但悲剧的是该批数据超过10万条,用EXCEL处理显然行不通,更悲剧的是打开直接就是乱码。于是笔者接了单子,筹划用SQLLDR进行导入。话说7年前做野村证券的BATCH系统时大量的使用了UNIX SHELL调用ORACLE SQLLDR功能,但若干年没用了居然对预防有些生疏。

处理过程:

1、本地建立控制文件

load data

infile 'd:\TMP_KAITOUSHUJU.csv'

into table TMP_KAITOUSHUJU

fields terminated by ','

(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)

2、WINDOWS下运用如下命令执行导入

sqlldr userid=test/test@PORTGB control=d:/TMP_KAITOUSHUJU.ctl log=d:/SQLLOAD.log

3、导入出错,提示部分列为空,查语法后改正控制文件如下

load data

infile 'd:\TMP_KAITOUSHUJU.csv'

into table TMP_KAITOUSHUJU

fields terminated by ','

trailing nullcols     --将所有不在纪录中的指定位置的列当作空值

(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)

4、导入成功,但打开一看乱码

通过select * from v$nls_parameters; 查看NLS_CHARACTERSET为AL32UTF8,

而我本机是GBK,于是本机通过DOS窗口进行如下设置:

set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

同时更改控制文件如下:

load data

CHARACTERSET AL32UTF8

infile 'd:\TMP_KAITOUSHUJU.csv'

into table TMP_KAITOUSHUJU

fields terminated by ','

trailing nullcols     --将所有不在纪录中的指定位置的列当作空值

(TRADE_CO,FULL_NAME,CUSTOMS_CODE,CO_CLASS,VALID_DATE,RG_DATE,ADDR_CO,BUSI_TYPE,CONTAC_CO,TEL_CO,LAW_MAN,LAW_MAN_TEL,CO_TYPE,BREAK_LAW_TIME1,BREAK_LAW_TIME2,INSPECT_TIME,COP_MODIFY_DATE)




转载请注明:http://www.xcqg58.com/jyqj/jyqj/34.html

  • 上一篇文章:
  •   
  • 下一篇文章: