2013-03-18 47 views
1
INSERT ALL 
into instructor values (
835, 'SPARKS', 4000 , 200, 978, '16-12-1984') 

into instructor values (
978, 'STEEL', 5000 , 250, 222, '16-01-1980') 

,它是:甲骨文插入多個值顯示錯誤消息

INSERT ALL 
into instructor values (
835, 'SPARKS', 4000 , 200, 978, '16-DEC-1984') 

into instructor values (
978, 'STEEL', 5000 , 250, 222, '16-JAN-1980') 

表中存在,並正確設置。 錯誤消息顯示ORA-01843:不是有效的月份。 我在哪裏做錯了?

謝謝

+0

檢查這[應答](http://stackoverflow.com/questions/13107900/ora-01843-not-a-valid-month)。可能有幫助。另請[see this](http://www.techonthenet.com/oracle/errors/ora01843.php) – 2013-03-18 12:09:03

回答

2

你給了DATE型列

在這樣的情況下,Oracle隱含根據NLS_DATE_FORMAT將字符串轉換爲日期 - 看到這個sqlfiddle example

要做到這一點是無論是作爲Valex suggested或類似這樣的正確方法:

INSERT ALL 
into instructor values (
835, 'SPARKS', 4000 , 200, 978,date '1984-12-16') 
into instructor values (
978, 'STEEL', 5000 , 250, 222, date '1980-01-16') 
SELECT * from DUAL; 
1

使用一個月爲3個字母的字符不是一個數字,而不是12使用十進制

1

只需使用TO_DATE字符串轉換成日期

INSERT ALL 
into instructor values (
835, 'SPARKS', 4000 , 200, 978,TO_DATE('16-12-1984','DD-MM-YYYY')) 
into instructor values (
978, 'STEEL', 5000 , 250, 222,TO_DATE('16-01-1980','DD-MM-YYYY')) 
SELECT * from DUAL; 
0

尤爾試圖插入日期而不提及格式,所以oracle使用其默認的DATE fromat,其中DD-MON-YYYY

您可以嘗試o n個SQL Fiddle

+0

這並不準確,Oracle Date沒有格式,也沒有diffault。問題在於他給出了一個字符串而不是日期,因此oracle必須將其轉換。爲此,它使用NLS_DATE_FORMAT參數(如上所述,AFAIK具有默認值) – 2013-03-18 13:36:18