当PolarDB的分析程序编译存储过程或函数时,分析程序会确认CREATE语句和程序主体(在关键子AS后的程序部分)与SPL程序规则和SQL构造一致。通过缺省,如果分析程序检测出一个错误,那么服务器会终止编译过程。

需要注意的是,分析程序检测出的是表达式里的语法错误,而不是语义错误。(例如,一个引用不存在的列、表、函数或不正确类型的值的表达式)。

如果服务器在SPL 代码中遇到指定的错误数,或在SQL 代码中遇到一个错误, 这时可以使用spl.max_error_count命令服务器停止解析。spl.max_error_count的缺省值为10,最大值为1000。 把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个错误的详细内容和一个错误综述。

当开发新代码或从其它代码源输入现有的代码时,要想保存时间信息,您可以设置spl.max_error_count的配置参数为相对较高的错误数。

需要注意的是,如果在一个程序主体的SPL代码中发生了错误,且分析程序在SQL代码段也遇到了错误时, 但是仍然命令服务器继续分析程序的话,那么在不正确的SQL代码后的任何SPL或SQL代码中也许仍然会存在错误。例如,下列函数导致了两个错误:
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...