Oracle插入多个值显示错误消息

时间:2013-03-18 12:04:18

标签: insert oracle11g sqldatetime

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')

表格EXISTS和SETUP CORRECTLY。 错误消息显示ORA-01843:不是有效月份。 我在哪里做错了?

谢谢

4 个答案:

答案 0 :(得分: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 :(得分:1)

使用月份作为3个字母的字符而不是数字而不是12个使用dec

答案 2 :(得分: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;

答案 3 :(得分:0)

您试图在不提及格式的情况下插入DATE,因此oracle使用其默认的DATE格式DD-MON-YYYY

您可以试用SQL Fiddle