ORA-01722:invalid number 解決方法


1、xxx.txt 

文本內容:

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

XXXXXXXXXXXX XXXXX XXXXXXXXX X X X X XXXX

2、XXX.ctl

....................................

INTO TABLE XXX_XXX_XXX -- 要插入記錄的表
Fields terminated by " " -- 數據中每行記錄用 空格 分隔
trailing nullcols --表的字段沒有對應的值時允許為空
(
REQUEST_ID,
REQUEST_TIME DATE 'YYYYMMDDHH24MISS',
REQUEST_SOURCE INTEGER EXTERNAL ,
BUSINESS_TYPE INTEGER EXTERNAL ,
PAY_TYPE INTEGER EXTERNAL ,
CARD_WHOLECOUNT INTEGER EXTERNAL,
CARD_WHOLEVALUE INTEGER EXTERNAL,
PAY_AMOUNT INTEGER EXTERNAL
)

3、利用sqlloader導入會出現ORA-01722:invalid number問題;

原因:換行符的存在,如果integer或者number類型的欄位位於表的最后,最后其實會有CR/LF的換行符,在用sqlldr導入時會把換行符也算作那個數字的一部分,使得對應的導入PAY_AMOUNT 的值與PAY_AMOUNT在數據庫中定義的NUMBER(8)類型不匹配,從而出錯。解決辦法加integer或者加“TERMINATED BY WHITESPACE”。

即:

trailing nullcols --表的字段沒有對應的值時允許為空
(
REQUEST_ID,
REQUEST_TIME DATE 'YYYYMMDDHH24MISS',
REQUEST_SOURCE INTEGER EXTERNAL ,
BUSINESS_TYPE INTEGER EXTERNAL ,
PAY_TYPE INTEGER EXTERNAL ,
CARD_WHOLECOUNT INTEGER EXTERNAL,
CARD_WHOLEVALUE INTEGER EXTERNAL,
PAY_AMOUNT INTEGER EXTERNAL TERMINATED BY WHITESPACE
)

注:在實際工程項目中,其實要導入9個字段,最后一個字段為導入時間,於是相應的在數據庫中創表時,默認導入時間值為SYSDATE

IMPORT_DATE DATE DEFAULT SYSDATE


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM