格納されたPLユニットをコンパイルする際、PLコンパイラはエラーやコンパイルの妨げには至らない状況に対して警告を生成します。例えば、廃止されたPL機能の使用などが該当します。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
PLSQL_WARNINGSパラメータ
PL警告のメッセージコードはPLW-nnnnnの形式です。
コンパイル時警告のカテゴリは以下の表のとおりです。
カテゴリ |
説明 |
例 |
|---|---|---|
| SEVERE | 不可解な動作や誤った結果を引き起こす可能性があります。 | パラメータのオーバーラッピング問題。 |
| PERFORMANCE | 性能に影響を与える可能性があります。 | VARCHAR2 値を INSERT ステートメント内の NUMBER 列に渡す。 |
| INFORMATIONAL | 性能や正確性には影響しませんが、コードの保守性を高めるために修正が必要な場合があります。 | 決して実行できないコード。 |
コンパイルパラメータ PLSQL_WARNINGS を設定することで、以下の機能を実現できます:
1つまたは複数の警告カテゴリ、および特定の警告を含むすべての警告を有効または無効にします。
指定された警告をエラーと見なします(PLユニットをコンパイルする前に修正する必要があります)。
以下の各項目では、PLSQL_WARNINGS の値を設定できます:
データベースインスタンスは
ALTER SYSTEMステートメントを使用します。セッションは
ALTER SESSIONステートメントを使用します。格納されたPLユニットは
ALTERステートメントおよびそのcompile_parameters_clauseを使用します。
上記のいずれかの ALTER ステートメントにおいても、以下の構文を使用して PLSQL_WARNINGS の値を設定します:
PLSQL_WARNINGS = 'value_clause [, value_clause] ...'
ALTER ステートメントを使用して PLSQL_WARNINGS 値を設定する例を以下に示します。
例1: セッションに対してすべてのアラートを有効にします。
ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL';
例2: セッションで INFORMATIONAL クラスのアラートを無効にします。
ALTER SESSION SET PLSQL_WARNINGS='DISABLE:INFORMATIONAL';
例3: セッションで PERFORMANCE クラスのアラートを有効にし、SEVERE クラスのアラートを無効にします。また、PLW-07002 アラートをエラーとして扱います。
ALTER SESSION
SET PLSQL_WARNINGS='ENABLE:PERFORMANCE, DISABLE:SEVERE, ERROR:07002';
DBMS_WARNINGパッケージ
コンパイラ可能なPLユニットの開発環境でPLユニットを作成する場合は、DBMS_WARNING パッケージ内のサブプログラムを呼び出して PLSQL_WARNINGS の値を表示および設定できます。
複雑なアプリケーションをコンパイルする際、DBMS_WARNING サブプログラムを使用して異なる PLSQL_WARNINGS 値を設定できます。DBMS_WARNING サブプログラムは、現在の PLSQL_WARNINGS 設定を保存したり、指定されたサブプログラムセットをコンパイルするために設定を変更したり、元の値に戻したりできます。
例:
obclient> ALTER SESSION SET PLSQL_WARNINGS='DISABLE:ALL'; --このセッションのすべてのアラートメッセージを無効にする
Query OK, 0 rows affected
obclient> CREATE OR REPLACE PROCEDURE sample_code AUTHID DEFINER AS
n CONSTANT BOOLEAN := TRUE;
BEGIN
IF n THEN
DBMS_OUTPUT.PUT_LINE('TRUE');
ELSE
DBMS_OUTPUT.PUT_LINE('FALSE');
END IF;
END sample_code;
/
Query OK, 0 rows affected
obclient> CALL DBMS_WARNING.set_warning_setting_string ('ENABLE:ALL', 'SESSION'); --このセッションのすべてのアラートメッセージを有効にする
Query OK, 0 rows affected
obclient> SELECT DBMS_WARNING.get_warning_setting_string() FROM DUAL; --現在のアラート設定を確認する
+-------------------------------------------+
| DBMS_WARNING.GET_WARNING_SETTING_STRING() |
+-------------------------------------------+
| ENABLE:ALL |
+-------------------------------------------+
1 row in set