2013-10-06 45 views
0

我試圖從.dat文件導入數據到oracle數據庫中的一個表,使用SQL加載程序使用SQL加載程序時出錯

控制文件:

LOAD DATA 
infile 'E:\labs\labs\lab_18_06.dat' 
INTO TABLE INVENTORY.PRODUCT_ON_HAND 
APPEND 
FIELDS TERMINATED BY ',' 
(on_hand_id, 
product_id, 
quantity, 
warehouse_city char(30), 
last_update date(12) 'DD-MON-YYYY') 

數據文件包含這樣一個記錄:

5001,1001,7,Atlanta,01-FEB-2004 

表數據庫:

SQL> desc inventory.product_on_hand; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ON_HAND_ID        NOT NULL NUMBER(5) 
PRODUCT_ID           NUMBER(7) 
QUANTITY           NUMBER(5) 
WAREHOUSE_CITY          VARCHAR2(30) 
LAST_UPDATE          DATE 

我收到以下錯誤.log文件:

Record 1: Failed - Error in the table INVENTORY.PRODUCT_ON_HAND, column LAST_UPDATE. 
ORA-01843: month not valid 

請幫助理清我的問題!

UPDATE:

SQL> select sysdate from dual; 

SYSDATE 
----------- 
06-OCT-2013 

我設置nls_lang='american'nls_date_format='DD-MON-YYYY',但這didn`t幫助/

壞文件:

5001,1001,7,Atlanta,01-FEB-2004 
5002,1001,7,Chicago,01-FEB-2004 
5003,1001,7,Orlando,01-FEB-2004 
5004,1002,7,Atlanta,01-FEB-2004 
5005,1002,7,Chicago,01-FEB-2004 
5006,1002,7,Orlando,01-FEB-2004 
5007,1003,7,Atlanta,01-FEB-2004 
5008,1003,7,Chicago,01-FEB-2004 
5009,1003,7,Orlando,01-FEB-2004 
5010,1004,7,Atlanta,01-FEB-2004 
5011,1004,7,Chicago,01-FEB-2004 
5012,1004,7,Orlando,01-FEB-2004 
5013,1005,7,Atlanta,01-FEB-2004 
5014,1005,7,Chicago,01-FEB-2004 
5015,1005,7,Orlando,01-FEB-2004 
5016,1006,7,Atlanta,01-FEB-2004 
5017,1006,7,Chicago,01-FEB-2004 
5018,1006,7,Orlando,01-FEB-2004 
5019,1007,7,Chicago,01-FEB-2004 
5020,1007,7,Orlando,01-FEB-2004 
5021,1007,7,Atlanta,01-FEB-2004 
5022,1008,7,Chicago,01-FEB-2004 
5023,1008,7,Orlando,01-FEB-2004 
5024,1008,7,Atlanta,01-FEB-2004 
5025,1009,7,Chicago,01-FEB-2004 
5026,1009,7,Orlando,01-FEB-2004 
5027,1009,7,Atlanta,01-FEB-2004 
5028,1010,7,Chicago,01-FEB-2004 
5029,1010,7,Orlando,01-FEB-2004 
5030,1010,7,Atlanta,01-FEB-2004 
5031,1010,7,Chicago,01-FEB-2004 
5032,1011,7,Orlando,01-FEB-2004 
5033,1011,7,Atlanta,01-FEB-2004 
5034,1012,7,Chicago,01-FEB-2004 
5035,1012,7,Orlando,01-FEB-2004 
5036,1012,7,Atlanta,01-FEB-2004 
5037,1013,7,Chicago,01-FEB-2004 
5038,1013,7,Orlando,01-FEB-2004 
5039,1014,7,Atlanta,01-FEB-2004 
5040,1014,7,Chicago,01-FEB-2004 
5041,1015,7,Atlanta,01-FEB-2004 
5042,1015,7,Chicago,01-FEB-2004 
5043,1015,7,Orlando,01-FEB-2004 
5044,1016,7,Atlanta,01-FEB-2004 
5045,1016,7,Chicago,01-FEB-2004 
5046,1016,7,Orlando,01-FEB-2004 
5047,1017,7,Atlanta,01-FEB-2004 
5048,1017,7,Chicago,01-FEB-2004 
5049,1017,7,Orlando,01-FEB-2004 
5050,1018,7,Atlanta,01-FEB-2004 
5051,1018,7,Chicago,01-FEB-2004 
+0

什麼是您的NLS_LANG設置?在所有語言中,「FEB」不是有效的月份名稱。 –

+0

@a_horse_with_no_name我設置了美國人。 –

+0

@a_horse_with_no_name是的,它是 –

回答

0

嘗試

alter session set nls_date_language='american'; 

LOAD DATA 
infile 'E:\labs\labs\lab_18_06.dat' 
INTO TABLE INVENTORY.PRODUCT_ON_HAND 
APPEND 
FIELDS TERMINATED BY ',' 
(on_hand_id, 
product_id, 
quantity, 
warehouse_city char(30), 
last_update date(12) 'DD-MON-YYYY') 
+0

結果:代替預期號碼找到非數字符號。由於MM - 是2位數,代表月份數。所以你的解決方案失敗了 –

+0

alter session set nls_date_language ='american'; – sunysen

+0

使用SQL plus我改變了會話,但同樣的錯誤依然存在。可能DATA格式和'DD-MON-YYYY'不同並需要轉換? –

0

問題是,您在控制文件中指定了12位數字:last_update date(12) 'DD-MON-YYYY',那是不正確的。

你應該把它當作last_update date 'DD-MON-YYYY'

SO控制文件SHLD是:

LOAD DATA 
infile 'E:\labs\labs\lab_18_06.dat' 
INTO TABLE INVENTORY.PRODUCT_ON_HAND 
APPEND 
FIELDS TERMINATED BY ',' 
(on_hand_id, 
product_id, 
quantity, 
warehouse_city char(30), 
last_update date 'DD-MON-YYYY') 
+0

不,這不是問題,因爲在我進行了更改之後,您建議,仍會出現相同的錯誤。 –

相關問題