最近はデータベースよりもWeb系のアプリに携わることが多いなかつです。
当記事では、データベースエンジニアである私が、0RA-01861のエラーの解決方法について解説します。
確認ポイントや確認用SQLも載せているので、この記事を読めば解決できるはずです。
紹介するポイントをもとにSQLを見直してみましょう!
高いけど一生使えるものだから、買っておくと良いかもです!(ベンダー関連の本は高いよね。。。)
本については最後にもう一度掲載しているので、まずはエラーを解決しちゃいましょう!
リンクで飛べる目次
ORA-01861: リテラルが書式文字列と一致しませんの原因
ORA-01861は、主に「日付形式の暗黙の型変換」において発生します。
まずは暗黙の型変換を理解しましょう。すでに理解している方は、次の章へ飛んでください。
oracleの暗黙の型変換とは?
oracleではテーブルに設定されたデータの型に合わせるように、自動的に投入データを変換します。
今回のエラーは、暗黙的変換が裏目に出ている可能性が高いです。
ここからは暗黙的変換を少し解説します。(暗黙的変換を理解している人は解決するSQLが書いてあるところまで飛んでください!)
「oracle側でデータの型に合わせて、投入データを変換すること」を暗黙的変換と呼びます。
例えば、日付型に対して文字型データを投入する場合に発生します。日付型の定義は、インスタンスごとに決められています。
その定義にあっていない場合、’2018/06/14’という文字を勝手に日付型の定義に変換しようとします。
これが暗黙的変換です。
ちなみに、暗黙的変換を使うとINDEXが効かなくなる等のデメリットがあり、処理速度が著しく落ちます。
できるだけ、明示的に変換をかけてあげましょう。
今回のエラーとの直接的な要因ですが、環境設定で決められている日付型に変換する際にデータ不備があると判断された場合にエラーとなります。
ORA-01861: リテラルが書式文字列と一致しませんの解決方法
ORA-01861はどのように解決すれば良いのでしょうか?
次の3ステップで解決します。
- データベース設定を確認する
- エラーと関係ない場所のテーブル定義も確認する
- 接続しているセッションだけ、DATE型を変更する
順番に見ていきましょう。
実行するSQLも書いているので、参考にしてください。
ステップ1:データベースの設定を確認する
まずは、データベースの設定を確認しましょう。
ORA-01861のエラーに関連がある部分は、
- 「NLS_DATE_FORMAT」
- 「NLS_TIME_FORMAT」
- 「NLS_TIMESTAMP_FORMAT」
など初期値のまま設定されていることが多い項目です。
ターミナルやDBツールで、以下のSQLを叩いて確認しましょう。
select * from v$nls_parameters;
意図していた定義が設定されているでしょうか?
もし合っていないようであれば、定義を修正する必要があります。
定義修正のSQLは以下となります。SPFILEを修正することで、エラーが解決されるケースがあります!
sqlplus> alter system set NLS_DATE_FORMAT = 'YYYY/MM/DD' SCOPE=SPFILE;
ステップ2:エラーと関係ない場所の定義も確認する
エラー発生箇所と暗黙の型変換が無関係と思われるばあいでも、エラーが発生することがあります。
エラー発生場所以外にも日付型のデータを使っているところは見直してみましょう!
ステップ3:接続しているセッションだけ、DATE型を変更する
sqlplusなどでDB接続を行っているときのそのセッションだけ、DATE型を変更することができます。
以下のSQLを最初に流してから、他のSQLを流してみてください。
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
oracle関連の本については最後に載せているので、確認してみてください!
ORA-01861: リテラルが書式文字列と一致しませんの原因と解決方法のまとめ
当記事では、ORA-01861の解決方法を紹介しました。解決のステップを踏むことでエラーを回避することが可能です。
エラーを根本的に修正するばあいは、DBの設定を修正する必要があるでしょう。
ここら辺のデータベース設定を教えてもらえないのは、厳しいですよね。
より良い環境へステップアップすれば、DBの定義は一覧化されているところもあります。
理解しなくてもエラーの対処法や勘所を見つけられるのは、こういうポケットリファレンスなんですよね!
高いけど一生使えるものだから、買っておくと良いかもです!(ベンダー関連の本は高いね。。。)
ITエンジニアにおすすめの記事
>>レバテックフリーランスの評判と口コミを実際に使った現役フリーランスSEが語る