2010年3月29日星期一

SQL Loader fichier CTL 不可理解的ORA-01722: Nombre non valide

Loader文件如下:

LOAD DATA
APPEND
INTO TABLE SE_KN_HEADERS
FIELDS TERMINATED BY ';'
(
NOKN,
NOEXP,
MODEXP,
LOCATION,
COUNTRY,
IATA_CODE,
AIRPORT,
AWB_NUMBER,
FLIGHT,
DEPART_DATE "to_date(:DEPART_DATE,'DDMMYYYY')",
DEPART_TIME "to_date(:DEPART_TIME,'HH24MI')",
ARR_DATE "to_date(:ARR_DATE,'DDMMYYYY')",
ARR_TIME "to_date(:ARR_TIME,'HH24MI')",
INVOICE_NUM,
INVOICE_AMOUNT "to_number(:INVOICE_AMOUNT,'9999999999.99')",
CURRENCY,
INVOICE_DATE "to_date(:INVOICE_DATE,'DDMMYYYY')",
POD_DATE "to_date(:POD_DATE,'DDMMYYYY')",
POD_TIME "to_date(:POD_TIME,'HH24MI')",
POD_SIGN,
SHIPMENT_WEIGHT,
NUMLOT "to_number(:NUMLOT,'99999999')"
)

测试的输入文件如下:

“123456;CCH001;ME;Marseille;France;IATA_CCH;MP2;AWB_CCH;F0123;29032010;1157;29032010;1800;CCH-INV-001;90;EUR;29032010;30032010;0900;SIGNE_CCH;SHIPMENT_CCH;100



在Oracle中运行后程序以warning结束,错误信息如下:

Enregistrement 1 : Rejeté - Erreur sur table "SE"."SE_KN_HEADERS", colonne NUMLOT. ORA-01722: Nombre non valide

分析:
文本文件中的NUMLOT一列是100,明明是Nombre,为什么会显示Nombre non valide呢?
问题在于csv文件中看不到的最后一个字符:回车。
文本中有两行,一行数据,另外一个是空行。就是这个空行和第一行最后一列里的数据连了起来,导致loader不能正确识别数字。
另外,如果分割符标错了的话(应该用‘;’分割,结果在某一数字列后用了‘,’,于是数字列就和后边的列合并了),一样也会出现这样的错误。

没有评论:

发表评论