スポンサーリンク

最近はデータベースよりもWeb系のアプリに携わることが多いなかつです。

当記事では、データベースエンジニアである私が、0RA-01861のエラーの解決方法について解説します。

確認ポイントや確認用SQLも載せているので、この記事を読めば解決できるはずです。

紹介するポイントをもとにSQLを見直してみましょう!

\エラーに対して毎回1から調べるのが面倒だよ!という人におすすめ!/

 

 

高いけど一生使えるものだから、買っておくと良いかもです!(ベンダー関連の本は高いよね。。。)

本については最後にもう一度掲載しているので、まずはエラーを解決しちゃいましょう!

スポンサーリンク

ORA-01861: リテラルが書式文字列と一致しませんの原因

ORA-01861は、主に「日付形式の暗黙の型変換」において発生します。

まずは暗黙の型変換を理解しましょう。すでに理解している方は、次の章へ飛んでください。

oracleの暗黙の型変換とは?

oracleではテーブルに設定されたデータの型に合わせるように、自動的に投入データを変換します。

今回のエラーは、暗黙的変換が裏目に出ている可能性が高いです。

 

ここからは暗黙的変換を少し解説します。(暗黙的変換を理解している人は解決するSQLが書いてあるところまで飛んでください!)

oracle側でデータの型に合わせて、投入データを変換すること」を暗黙的変換と呼びます。

 

例えば、日付型に対して文字型データを投入する場合に発生します。日付型の定義は、インスタンスごとに決められています。

その定義にあっていない場合、’2018/06/14’という文字を勝手に日付型の定義に変換しようとします。

これが暗黙的変換です。

 

ちなみに、暗黙的変換を使うとINDEXが効かなくなる等のデメリットがあり、処理速度が著しく落ちます。

できるだけ、明示的に変換をかけてあげましょう。

 

今回のエラーとの直接的な要因ですが、環境設定で決められている日付型に変換する際にデータ不備があると判断された場合にエラーとなります。

スポンサーリンク

ORA-01861: リテラルが書式文字列と一致しませんの解決方法

ORA-01861はどのように解決すれば良いのでしょうか?

次の3ステップで解決します。

  1. データベース設定を確認する
  2. エラーと関係ない場所のテーブル定義も確認する
  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の定義は一覧化されているところもあります。

理解しなくてもエラーの対処法や勘所を見つけられるのは、こういうポケットリファレンスなんですよね!

\oracleを触る機会が多い人は一冊持っておくと心強いです!/

高いけど一生使えるものだから、買っておくと良いかもです!(ベンダー関連の本は高いね。。。)

 

システムエンジニアの転職に関しての記事はこちら→【超厳選】システムエンジニアにおすすめの転職サイト、エージェント【まだ登録してないの?】

スポンサーリンク

Twitterでフォローしよう

おすすめの記事