Oracle パーサーと互換性のある PolarDB データベースがプロシージャまたは関数をコンパイルすると、CREATE 文とプログラム本体 (プログラムの AS キーワードに続く部分) の両方が SPL および SQL コンストラクトの文法ルールに準拠していることが確認されます。 デフォルトでは、パーサーがエラーを検出すると、サーバーはコンパイルプロセスを終了します。 パーサーは、セマンティックエラー (存在しない列、テーブル、関数、または正しくないタイプを参照する式) ではなく、式の構文エラーを検出することにご注意ください。

spl.max_error_count は、SPL コードで指定された数のエラーが発生した場合、または SQL コードでエラーが発生した場合に、解析を停止するようサーバーに指示します。 spl.max_error_count パラメーターのデフォルト値は 10 です。 最大値は 1,000 です。 spl.max_error_count の値を 1 に設定すると、SPL または SQL コードで最初のエラーが発生したときに、解析を停止するようサーバーに指示します。

SET 文を使用して、現在のセッションの spl.max_error_count の値を指定できます。 構文は次のとおりです。

SET spl.max_error_count = number_of_errors

number_of_errors は、サーバーがコンパイルプロセスを停止する前に発生する可能性がある SPL エラーの数を指定します。 例:

SET spl.max_error_count = 6

この例では、コードは発生した最初の 5 つの SPL エラーを渡し続けるようにサーバーに指示します。 サーバーは 6 番目のエラーを検出すると検証を停止し、エラー概要と 6 つの詳細なエラーメッセージを出力します。

新しいコードを開発するとき、または別のソースから既存のコードをインポートするとき、spl.max_error_count 構成パラメーターを比較的大きめのエラー数に設定することで、時間を削減することができます。

プログラム本体の SPL コードでエラーを解析および無視し続けるようにサーバーを設定し、パーサーが SQL コードのセグメントでエラーを検出した場合、エラーのある SQL コードの後に続く SPL または SQL コードにエラーが発生する可能性があることにご注意ください。 たとえば、次の内容は、2 つのエラーが発生する関数について説明しています。

CREATE FUNCTION computeBonus(baseSalary number) RETURN number AS
BEGIN

    bonus := baseSalary * 1.10;
    total := bonus + 100;

    RETURN bonus;
END;

ERROR:  "bonus" is not a known variable
LINE 4:     bonus := baseSalary * 1.10;
            ^
ERROR:  "total" is not a known variable
LINE 5:     total := bonus + 100;
            ^
ERROR:  compilation of SPL function/procedure "computebonus" failed due to 2 errors

次の例では、前述の例に SELECT 文を追加しています。 SELECT 文のエラーは、後に続く他のエラーをマスクします。

CREATE FUNCTION computeBonus(employeeName number) RETURN number AS
BEGIN
    SELECT salary INTO baseSalary FROM emp
      WHERE ename = employeeName;

    bonus := baseSalary * 1.10;
    total := bonus + 100;

    RETURN bonus;

END;

ERROR:  "basesalary" is not a known variable
LINE 3:     SELECT salary INTO baseSalary FROM emp WHERE ename = emp...