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: not a valid month。我哪里做错了?

谢谢

4

4 回答 4

2

您正在为DATE类型列 提供一个字符串。

在这种情况下,Oracle 将字符串隐式转换为日期NLS_DATE_FORMAT- 请参阅此sqlfiddle 示例

正确的方法是按照Valex 的建议或像这样:

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;
于 2013-03-18T13:31:38.803 回答
1

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

于 2013-03-18T12:08:40.450 回答
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;
于 2013-03-18T12:11:35.563 回答
0

您正在尝试插入 DATE 而不提及格式,因此 oracle 正在使用其默认 DATE fromatDD-MON-YYYY

你可以试试SQL Fiddle

于 2013-03-18T12:26:26.710 回答