ストレージ用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