コンパイル時の警告

PL/SQLコンパイラは、ストアドPL/SQLユニットのコンパイル中に、エラーを生成してコンパイルの妨げになるほど重大ではない条件(非推奨のPL/SQL機能を使用している場合など)に対して、警告を生成します。

コンパイル中に生成される警告(およびエラー)を確認するには、静的データ・ディクショナリ・ビュー*_ERRORSを問い合せるか、SQL*Plus環境でコマンドのSHOW ERRORSを使用します。

PL/SQL警告のメッセージ・コードは、PLW-nnnnnという形式です。

表12-1 コンパイル時の警告カテゴリ

カテゴリ 説明

SEVERE

条件によって、予期しないアクションまたは誤った結果が発生する可能性があります。

パラメータのエイリアシング問題

PERFORMANCE

条件によって、パフォーマンス問題が発生する可能性があります。

INSERT文でNUMBER列にVARCHAR2値が渡した場合

INFORMATIONAL

条件は、パフォーマンスまたは正確性には影響しませんが、コードのメンテナンス性の向上のために変更する必要がある場合があります。

実行できないコード

コンパイル・パラメータPLSQL_WARNINGSを設定すると、次の操作を実行できます。

  • すべての警告、1つ以上の警告カテゴリまたは特定の警告の有効化および無効化

  • 特定の警告のエラーとしての処理(その条件が修正されるまで、PL/SQLユニットはコンパイルできません)

PLSQL_WARNINGSの値は、次のものに対して設定できます。

前述のいずれかのALTER文で、PLSQL_WARNINGSの値を次の構文で設定します。

PLSQL_WARNINGS = 'value_clause' [, 'value_clause' ] ...

value_clauseの構文は、『Oracle Databaseリファレンス』を参照してください。

PLSQL_WARNINGSの現在の値を表示するには、静的データ・ディクショナリ・ビューALL_PLSQL_OBJECT_SETTINGSを問い合せます。

関連項目:

例12-1 PLSQL_WARNINGSコンパイル・パラメータの値の設定

この例では、PLSQL_WARNINGSの値を設定するALTER文をいくつか示します。

セッションで、すべての警告を有効にします(開発時に特にお薦めします)。

ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';

セッションで、PERFORMANCE警告を有効にします。

ALTER SESSION SET PLSQL_WARNINGS='ENABLE:PERFORMANCE';

プロシージャloc_varで、PERFORMANCE警告を有効にし、設定を再利用します。

ALTER PROCEDURE loc_var
  COMPILE PLSQL_WARNINGS='ENABLE:PERFORMANCE'
  REUSE SETTINGS;

セッションで、SEVERE警告を有効にし、PERFORMANCE警告を無効にして、PLW-06002警告をエラーとして処理します。

ALTER SESSION
  SET PLSQL_WARNINGS='ENABLE:SEVERE', 'DISABLE:PERFORMANCE', 'ERROR:06002';

セッションで、すべての警告を無効にします。

ALTER SESSION SET PLSQL_WARNINGS='DISABLE:ALL';

DBMS_WARNINGパッケージ

PL/SQLユニットをコンパイルする開発環境(SQL*Plusなど)でPL/SQLユニットを作成している場合、DBMS_WARNINGパッケージ内のサブプログラムを起動することで、PLSQL_WARNINGSの値を表示および設定できます。

例12-2では、ALTER SESSION文を使用して、このセッションのすべての警告メッセージを無効化した後、使用不可コードを含むプロシージャをコンパイルしています。このプロシージャは警告なしでコンパイルされます。次に、DBMS_WARNING.set_warning_setting_stringを起動してこのセッションのすべての警告を有効化し、DBMS_WARNING.get_warning_setting_stringを起動してPLSQL_WARNINGSの値を表示しています。最後に、プロシージャを再コンパイルすると、コンパイラは使用不可コードに関する警告を生成します。

ノート:

使用不可コードは、間違いの可能性またはデバッグ・フラグで意図的に隠されている可能性があります。

複数のネストしたSQL*Plusスクリプトで構成され、サブプログラムごとに異なるPLSQL_WARNINGSを設定する必要がある複雑なアプリケーションをコンパイルする場合は、DBMS_WARNINGサブプログラムが便利です。DBMS_WARNINGサブプログラムを使用すると、現行のPLSQL_WARNINGS設定を保存し、設定を変更して特定のサブプログラム・セットをコンパイルしてから、設定を元の値にリストアすることができます。

関連項目:

DBMS_WARNINGパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください

例12-2 DBMS_WARNINGサブプログラムを使用したPLSQL_WARNINGSの表示と設定

このセッションで、すべての警告メッセージを無効にします。

ALTER SESSION SET PLSQL_WARNINGS='DISABLE:ALL';

警告を無効にすると、このプロシージャは警告なしでコンパイルされます。

CREATE OR REPLACE PROCEDURE unreachable_code AUTHID DEFINER AS
  x CONSTANT BOOLEAN := TRUE;
BEGIN
  IF x THEN
    DBMS_OUTPUT.PUT_LINE('TRUE');
  ELSE
    DBMS_OUTPUT.PUT_LINE('FALSE');
  END IF;
END unreachable_code;
/

このセッションで、すべての警告メッセージを有効にします。

CALL DBMS_WARNING.set_warning_setting_string ('ENABLE:ALL', 'SESSION');

警告の設定を確認します:

SELECT DBMS_WARNING.get_warning_setting_string() FROM DUAL;

結果:

DBMS_WARNING.GET_WARNING_SETTING_STRING()
-----------------------------------------
 
ENABLE:ALL
 
1 row selected.

プロシージャを再コンパイルします:

ALTER PROCEDURE unreachable_code COMPILE;

結果:

SP2-0805: Procedure altered with compilation warnings

エラーを表示します:

SHOW ERRORS

結果:

Errors for PROCEDURE UNREACHABLE_CODE:
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/5      PLW-06002: Unreachable code