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 を示しています: 有効な月ではありません。どこで間違ったのですか?

ありがとうございました

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

月を12の代わりに数字ではなく3文字の文字として使用する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 を挿入しようとしているため、オラクルはデフォルトの DATE fromat を使用しています。DD-MON-YYYY

SQL Fiddleを試すことができます

于 2013-03-18T12:26:26.710 に答える