2015年3月11日 星期三

[ORACLE] 使用SQL Loader將文字檔匯入資料庫出現ORA-01861及ORA-01722錯誤訊息解法

1. 準備好SQL*Loader Control File
========Control File範例,檔名為import.ctl=========
load data
infile 'EXP_MYTABLE.txt'
into table MYTABLE
fields terminated by ","
(datadt,actno,brno)
===========================================
以上參數說明如下:
> infile 上傳檔案的路徑及檔名,此例為EXP_MYTABLE.txt,且路徑與Control File相同
> into table 要載入到那一個table,上面表示要載入MYTABLE
> fields terminated by 欄位與欄位的分隔符號
(datadt,actno,brno) 要填入資料的表格欄位名稱

2. 執行sqlldr,語法:sqlldr 帳號/密碼@ORACLE_SID control=控制檔名
    例如:sqlldr system/system@mysid control=import.ctl

結果就出現 ORA-01861: literal does not match format string的錯誤訊息,此錯誤訊息是指日期格式不匹配,解法很簡單將Control File內容改一下就OK了。
========Control File範例,檔名為import.ctl=========
load data
infile 'EXP_MYTABLE.txt'
into table MYTABLE
fields terminated by ","
(datadt timestamp "yyyy-mm-dd hh24:mi:ss", actno,brno)
===========================================

P.S. 在我的環境下import.ctl及EXP_MYTABLE.txt都是在Windows下產生,但sqlldr是在Linux下執行,所以再將檔案上傳到Linux時須先將檔案轉成linux格式,簡單來說就是把enter符號給去掉,不然有可能會在執行sqlldr出現錯誤,或是ORA-01722:invalid number的錯誤