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