ブログ - ORA-01861: リテラルが書式文字列と一致しません
日時を,YYYY/MM/DD HH:MM:SS形式でデータを登録することは多いと思うけれど,Oracleでエラーになる時があった.そして再現してみる.
テーブルを作成する.
データを投入する.
sysdateなのでサーバが保持している日時データがセットされた.これを特定の日時にアップデートして見る.
こんな時はNLS_DATE_FORMATを使う.
これは,デフォルトの設定がRR-MM-DD HH24:MI:SSになっているから.セッション変数だけれど変更した後,再度アップデートして見る.
正しく更新されたか確認してみましょう.
意図した通りになっていました!
テーブルを作成する.
scott@XE> create table w1 ( a char,b date);
表が作成されました。
scott@XE>
scott@XE> insert into w1 values ('a',sysdate);
1行が作成されました。
scott@XE>
scott@XE> update w1 set a='B', b = '2999/12/31 23:59:59';
update w1 set a='B', b = '2999/12/31 23:59:59'
*
行1でエラーが発生しました。:
ORA-01861: リテラルが書式文字列と一致しません
scott@XE>
scott@XE> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
セッションが変更されました。
scott@XE>
scott@XE> update w1 set a='B', b = '2999/12/31 23:59:59';
1行が更新されました。
scott@XE>
scott@XE> select * from w1;
A B
-------------------
B 2999/12/31 23:59:59
scott@XE>