ストレージされた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ユニットを開発環境で作成する場合、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