当PolarDB PostgreSQL版(兼容Oracle)分析程序编译存储过程或函数时,它们确认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个错误时,它会停止验证,并输出6个详细的错误消息和1个错误摘要。
为节省开发新代码或从另一个源导入现有代码所需的时间,您可以将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 3: bonus := baseSalary * 1.10;
^
ERROR: "total" is not a known variable
LINE 4: 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...
文档内容是否对您有帮助?