2013-03-18 2 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') 

и это было:Oracle Insert Multiple Value Показывает сообщение об ошибке

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

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

Таблица EXISTS и НАСТРОЙКА ПРАВИЛЬНО. Сообщение об ошибке показывает ORA-01843: недействительный месяц. Где я сделал это неправильно?

Спасибо

+0

проверить это [ответ] (http://stackoverflow.com/questions/13107900/ora-01843-not-a-valid-month). Может быть полезно. Также [см. Это] (http://www.techonthenet.com/oracle/errors/ora01843.php) –

ответ

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

Йор пытается вставить DATE без упоминания формата, поэтому оракул использует свой DATE по умолчанию, который DD-MON-YYYY

Вы можете попробовать o п SQL Fiddle

+0

Это неточно, Oracle Date не имеет формата и не является отличительным. Проблема в том, что он дает строку вместо даты, поэтому оракул должен ее преобразовать. Для этого он использует параметр NLS_DATE_FORMAT (который AFAIK имеет значение по умолчанию, как вы упомянули) –

Смежные вопросы