IT技術と資産運用

ITのmiyamon-log

Oracleデータベース:PL/SQL コンパイル・エラー 原因の調べ方

この記事はPL/SQL (Procedure Language/Structured Query Language) のエラーの調べ方について、簡単に纏めたものです。

Oracleなどはエラーが出た場合のメッセージが分かりにくいため、エラーの原因特定にお困りの方はご参考ください。

 

SQLPLUS : show error コマンドでエラーを確認しよう

 

miya
Oracleのエラーメッセージって不親切ですよね。SQLPLUSを使いデータベースにプロシージャ(PL/SQL)を適用しようとすると以下のようなエラーメッセージになります。

 

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)


SQL 第2版 ゼロからはじめるデータベース操作

 

  • B!