在使用SQL*LOADER装载数据时,由于平面文件的多样化和数据格式问题总会遇到形形色色的一些小问题,下面是工作中累积、整理记录的遇到的一些形形色色错误。希望能对大家有些用处。(今天突然看到自己以前整理的这些资料,于是稍稍整理、归纳成这篇博客,后面如果碰到其他案例,会陆陆续续补充在此篇文章。)
ERROR 1:SQL*LOADER装载数据成功,但是发现某些字段的中文为乱码,这个是因为编码缘故造成乱码。可在控制文件中添加字符集编码参数解决问题,
例如:CHARACTERSET ‘ZHS16GBK’ 或 CHARACTERSET ‘UTF8’,根据数据库实际情况设置数据库字符集。
LOAD DATACHARACTERSET 'ZHS16GBK' INFILE '/oradata/impdata/test.txt' APPEND INTO TABLE ETL.TESTFIELDS TERMINATED BY '@#$' TRAILING NULLCOLS(MON_CD , CITY_ID
,CELL_ID
,GPRS_USER_CNT
,TERM_BRAND
,BRAND_ID
,FLUX
,CELL_NAM
)
ERROR 2:装载数据时,报ORA-01722: invalid number错误(不是数据类型错误造成的一般错误。而是最后一个字段为NUMBER类型时,会报上述错误)因为换行符的问题,如果NUMBER类型的列位于表的最后,最后其实会有换行符(如果为n,不会出错, 如果为rn,则会报错),在用SQLLDR导入时会把换行符也算作那个数字的一部分,从而出错。解决办法加INTEGER或者加“TERMINATED BY WHITESPACE”。
Record 1: Rejected – Error on table DM.TM_WGGHF_CELL_USER_DAY, column TYPE_ID.
ORA-01722: invalid number
注意:如果数据字段类型是NUMBER类型,则用INTEGER会导致装载的数据异常,99.875000 会变成一个很大的整数。
ERROR 3:装载数据时,由于里面有日期字段,需要添加日期函数处理特定格式的数据类型。否则会出现错乱格式
LOAD APPEND INTO TABLE ODS.TO_ALARM_LOGFIELDS TERMINATED BY '@#$' TRAILING NULLCOLS(COLLECT_DT ,DATE_CD
,HR_CD
,DISPH_LOST_REASON
,COLLET_TYPE_ID
,ALM_TM
"TO_DATE(:ALM_TM,'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')"
,ALM_DISCOVER_TM "TO_DATE(:ALM_DISCOVER_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,ALARM_DELSTA_ID
,ALM_RESUME_TM
"TO_DATE(:ALM_RESUME_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')" ,FP_ALM_SER
,FP3_ALM_FINGMARK
,AREA_NAM
,VSEQUIP_NAM
,VSEQUIP_STATUS_ID
,VSEQUIP_SUBSTATUS_ID
,PLAN_DISPH_TM
"TO_DATE(:PLAN_DISPH_TM, 'DD-MM-YYYY HH24:MI:SS', 'NLS_DATE_LANGUAGE=American')"
,AUTO_PRETREAT_STATUS_ID
,EMOS_RECORD_CNT
,CONT_TIME










