開発時に発生するエラー
ORA-01861: リテラルが書式文字列と一致しません
多くの場合は、日付の暗黙変換において発生する。
原因
日付と時間の暗黙変換は
NLS_DATE_FORMAT、NLS_TIME_FORMAT、NLS_TIMESTAMP_FORMAT
初期化パラメータによって行われる。
このフォーマット書式と入力パラメータの書式が一致していないことによってエラーが発生する。
対応
NLS_DATE_FORMAT、NLS_TIME_FORMAT、NLS_TIMESTAMP_FORMAT
これらの初期化パラメータは NLS_TERRITORY や NLS_LANGUAGE による影響があり、
明示的に指定していない場合には値が変化する。
一見するとエラー発生箇所と日付の暗黙変換とは無関係と思われる場合でも、ORA-01861: 〜エラーが発生することがある。
とりあえず、NLS_DATE_FORMAT、NLS_TIME_FORMAT、NLS_TIMESTAMP_FORMAT 初期化パラメータを 設定例
を実行して反応を見る。
使用している環境によっては環境変数で設定が変更されていることもあるので、そちらも同時に確認する。
初期化パラメータが原因と考えられる場合には、ALTER SYSTEM 〜 で初期化パラメータを恒久的に変更するか、
環境変数設定することで運用する。
まずは、以下の SQL をソースコードに仕込んでみてプログラムの動作を確認してみるのも手である。
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIME_FORMAT='HH24:MI:SSXFF';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SSXFF';
関連事項
一覧ページへ戻る
OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。