この記事はPL/SQL (Procedure Language/Structured Query Language) のエラーの調べ方について、簡単に纏めたものです。
Oracleなどはエラーが出た場合のメッセージが分かりにくいため、エラーの原因特定にお困りの方はご参考ください。
SQLPLUS : show error コマンドでエラーを確認しよう
SQL> test_pl.sql
警告:トリガーが作成されましたが、コンパイル・エラーがあります。
これでは、具体的にどういったエラーなのか分かりません。データベースでエラーが発生した時は show error
コマンドで詳細を確認することができます。
SQL> show error
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/3 PL/SQL: SQL ignored
3/3 PL/SQL: ORA-01742; コメントが正しく終了していません。
12/4 PLS-00103; 記号"end-of-file"が見つかりました。
次のうちの1つが入るとき:
;
12/4 PLS-00111: コメントの中にファイルの終わり(EOF)があります。
より詳しく知りたい方は以下リファレンスをご参照ください。
[blogcard url="https://docs.oracle.com/cd/E16338_01/server.112/b56314/ch_twelve041.htm"]
Oracle エラー(ORA-01742)
show error
でエラー内容を確認できたら、次はエラーコードについて調べましょう。
エラーコード: ORA-01742
詳細: コメントが正しく終了していません。
原因: 表示されている/*トークンで始まるコメントまたはヒントが、終わりを示す*/トークンで終了していません。
アクション: */でコメントまたはヒントを正しく終了させてください。
原因はSQL文を記載したファイルの文字コードが(Shift_JIS(シフトジス))に対して、DBの文字コードがUTF-8だった場合などに発生していました。
以下のようにマルチバイト文字(日本語)を入れていた場合、DBがSQL文を読み込んだ時に文字化けしてしまいます。文字化けした箇所がファイルの終わり(EOF)と判断されエラーが発生していました。
コメントの例:
/* 障害番号xxの対応のため、以下を追加 */
SJISをUTF-8で開くと:
最後に
SQLでのエラーは知っていれば一瞬で解決しますが、知らなければ調査にかなりの時間を奪われてしまいます。
実務以外にも、書籍やサイトから情報を収集することをオススメします。
以下にSQLのコマンド一覧を纏めています。よろしければお仕事の効率化にご活用ください。
https://miyalog.info/technology/sql/1080/
SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)