2016-12-18 4 views
1

ユーザー入力から日付をテーブルに挿入しようとしましたが、何かが機能しません。文字列をOracle 11gで日付に変換できません

I次のクエリがあります。

2000年10月1日

をと終了日のために私が設定:

INSERT INTO DOCTORS.TREATMENTS 
    (START_OF_TREATMENT, END_OF_TREATMENT, DOCTORS_ID,PACIENTS_ID, DIAGNOSIS_ID) 
    VALUES (TO_DATE(&startdate, 'yyyy/mm/dd'), TO_DATE(&enddate, 'yyyy/mm/dd'), 3, 1, 1); 

は、開始日のために私は設定を

2000/11/01

それは私のためにOKに見えるが、私は次のエラー持っている:

エラーレポート - ORA-01858:数値が期待されていたところ、数値以外の文字が見つかった ORA-06512を:SYS.STANDARD、167行目 ORA-06512:2行目 01858. 00000 - "数字が必要な場所に数値以外の文字が見つかりました" *原因:日付を使用して変換される入力データフォーマットモデルは です。入力データには、フォーマットモデルで必要とされる数字が の数字が含まれていませんでした。 *処置:入力データまたは日付書式モデルを修正して、 要素の番号と型が一致することを確認してください。次に、操作を再試行します。

なぜこのエラーが発生したのか説明できます。

お勧めします、 Petar。

+0

両方のフィールドの種類は、日付です。 –

+0

'2000/10/01 == 200' – Bohemian

+1

あなたはどういうエラーメッセージが表示されますか? ORA-01840 *入力値が日付書式に十分ではありません。*実際には、これは予期したメッセージですが、 @Bohemianは言うように、オラクルは最初にあなたが与えた表現のために200を代用します。ボブはあなたのコードを修正する正しい方法を教えましたが、あなたがしたエラーはなぜ不明なのですか? – mathguy

答えて

3

TO_DATEに渡される最初のパラメータの値は文字列でなければなりません。あなたのコードに与えられた値で置き換えられた後は、

TO_DATE(2000/10/01, 'yyyy/mm/dd') 

のように表示されます。

ソリューションは

TO_DATE('&startdate', 'yyyy/mm/dd') 

この方法で、&startdateが置換されている場合、あなたが買ってあげるのように、置換値の文字列にするために、単一引用符でパラメータの使用を置くことです

TO_DATE('2000/10/01', 'yyyy/mm/dd') 

これは期待どおりに動作します。

&enddateも同じです。

幸運のベスト。

+0

ありがとう、男! :) –

+0

少なくとも、私のマシンでは、 "示されているように"落ちません。私のシステムでは、置換変数が単一引用符で囲まれていないと別のエラーメッセージが表示されます。元の投稿のコメントを参照してください。これがコードを修正する正しい方法ですが、OPがなぜ彼が行った特定のエラーメッセージを受け取ったのかを完全には説明できません。 – mathguy

関連する問題