スポンサーリンク

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

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

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

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

\oracleの勉強はこれがおすすめ!/

\もうひとつおすすめの本はこれ!/

これはトラブルシューティングとかデータベース運用とかその時に応じた便利技が載っています!この手の本は現場にひとつあると助かるのでぜひ一読を!(会社によっては経費になるかもです!)

 

\エラーに対して毎回1から調べるのが面倒だよ!という人におすすめ!/
正直な話上の2冊はしっかり勉強してデータベース(oracle)について理解したい場合に買ってほしい。でもリファレンスについては勉強したくないひとほど必要なんじゃないかって思ってます。

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

 

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

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

スポンサーリンク

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

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

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

oracleの暗黙の型変換とは?

oracleではデータの型に合わせるように自動的に投入データを変換してくれます。

今回のエラーは暗黙的変換が裏目に出ている可能性が高いです。そこで暗黙的変換を少し解説します。
先に要点を伝えると「oracle側でデータの型に合わせて、投入データを変換すること」を暗黙的変換と呼びます。

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

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

ちなみに暗黙的変換を使うとINDEXが効かなくなる等のデメリットがあり、処理速度が著しく落ちます。できるだけ明示的に変換をかけてあげることが大切です。

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

スポンサーリンク

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

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

次のステップで解決していきましょう!

ステップ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の勉強はこれがおすすめ!/

\もうひとつおすすめの本はこれ!/
これはトラブルシューティングとかデータベース運用とかその時に応じた便利技が載っています!この手の本は現場にひとつあると助かるのでぜひ一読を!(会社によっては経費になるかもです!)

\エラーに対して毎回1から調べるのが面倒だよ!という人におすすめ!/
正直な話上の2冊はしっかり勉強してデータベース(oracle)について理解したい場合に買ってほしい。でもリファレンスについては勉強したくないひとほど必要なんじゃないかって思ってます。

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

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

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

スポンサーリンク

Twitterでフォローしよう

おすすめの記事