當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...
文檔內容是否對您有幫助?