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