コンパイル時の警告
PL/SQLコンパイラは、ストアドPL/SQLユニットのコンパイル中に、エラーを生成してコンパイルの妨げになるほど重大ではない条件(非推奨のPL/SQL機能を使用している場合など)に対して、警告を生成します。
コンパイル中に生成される警告(およびエラー)を確認するには、静的データ・ディクショナリ・ビュー*_ERRORS
を問い合せるか、SQL*Plus環境でコマンドのSHOW
ERRORS
を使用します。
PL/SQL警告のメッセージ・コードは、PLW-nnnnnという形式です。
表12-1 コンパイル時の警告カテゴリ
カテゴリ | 説明 | 例 |
---|---|---|
|
条件によって、予期しないアクションまたは誤った結果が発生する可能性があります。 |
パラメータのエイリアシング問題 |
|
条件によって、パフォーマンス問題が発生する可能性があります。 |
|
|
条件は、パフォーマンスまたは正確性には影響しませんが、コードのメンテナンス性の向上のために変更する必要がある場合があります。 |
実行できないコード |
コンパイル・パラメータPLSQL_WARNINGS
を設定すると、次の操作を実行できます。
-
すべての警告、1つ以上の警告カテゴリまたは特定の警告の有効化および無効化
-
特定の警告のエラーとしての処理(その条件が修正されるまで、PL/SQLユニットはコンパイルできません)
PLSQL_WARNINGS
の値は、次のものに対して設定できます。
-
Oracle Databaseインスタンス
ALTER
SYSTEM
文を使用します。この文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
セッション
ALTER
SESSION
文を使用します。この文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
ストアドPL/SQLユニット
「ALTER文」の
ALTER
文をcompiler_parameters_clause
とともに使用します。
前述のいずれかのALTER
文で、PLSQL_WARNINGS
の値を次の構文で設定します。
PLSQL_WARNINGS = 'value_clause' [, 'value_clause' ] ...
value_clause
の構文は、『Oracle Databaseリファレンス』を参照してください。
PLSQL_WARNINGS
の現在の値を表示するには、静的データ・ディクショナリ・ビューALL_PLSQL_OBJECT_SETTINGS
を問い合せます。
関連項目:
-
静的データ・ディクショナリ・ビュー
ALL_PLSQL_OBJECT_SETTINGS
の詳細は、『Oracle Databaseリファレンス』を参照してください -
すべてのPL/SQL警告のメッセージ・コードは、『Oracle Databaseエラー・メッセージ』を参照してください
-
静的データ・ディクショナリ・ビュー
*_ERRORS
の詳細は、『Oracle Databaseリファレンス』を参照してください -
PL/SQLユニットおよびコンパイラ・パラメータの詳細は、「PL/SQLユニットおよびコンパイル・パラメータ」を参照してください
例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