開発時に発生するエラー
ORA-01830: 日付書式の変換で不要なデータが含まれています。
原因
暗黙変換 を期待して日付型に文字列項目を代入して、かつ、NLS_DATE_FORMAT または NLS_TIMESTAMP_FORMAT の環境設定を変更したことを忘れている場合に遭遇する機会が多いと思われる。
NLS_DATE_FORMAT、NLS_TIME_FORMAT や NLS_TIMESTAMP_FORMAT などは日付型を文字列に変換するためのフォーマットだけではなく 文字列を日付型に暗黙変換する場合にも使用される。
ALTER SESSION によるエラー発生のシュミレーション
正常ケース (NLS_DATE_FORMAT が 'yyyy-mm-dd hh24:mi:ss' のとき)
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
セッションが変更されました。
SQL> select date '2000-01-01' from dual;
DATE'2000-01-01'
-------------------
2000-01-01 00:00:00
SQL> select to_date('2000-01-01 23:59:59') from dual;
TO_DATE('2000-01-01
-------------------
2000-01-01 23:59:59
エラー発生ケース (NLS_DATE_FORMAT を 'yyyy-mm-dd' に変更)
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
セッションが変更されました。
SQL> select date '2000-01-01' from dual;
DATE'2000-
----------
2000-01-01
SQL> select to_date('2000-01-01 23:59:59') from dual;
select to_date('2000-01-01 23:59:59') from dual
*
行1でエラーが発生しました。:
ORA-01830: 日付書式の変換で不要なデータが含まれています
書式を指定した明示的な変換にした例
SQL> select to_date('2000-01-01 23:59:59', 'yyyy-mm-dd hh24:mi:ss') from dual;
TO_DATE('2
----------
2000-01-01
対応
SQL*Plus などをフロントエンドプロセッサとして使用する場合には暗黙変換を利用するのは常套手段である。しかし、プログラムにおいて暗黙変換を使用するのは控えて必ず 書式を指定した明示的な変換 を使用する。
関連事項
一覧ページへ戻る
OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。