存储过程和函数中的编译错误
当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...
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论