只有 ON EXCEPTION RESUME 子句出现在过程定义中,跟随在导致出现错误的语句之后的代码才会执行。
您可以使用嵌套的复合语句来增强相关控制,以控制哪些语句在出现错误之后仍执行,哪些语句不执行。
以下示例说明如何使用嵌套的复合语句来控制程序流。此过程基于在过程和触发器中缺省的错误处理中用作示例的过程。
DROP PROCEDURE OuterProc; DROP PROCEDURE InnerProc; CREATE PROCEDURE InnerProc() BEGIN BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE VALUE '52003'; MESSAGE 'Hello from InnerProc' TO CLIENT; SIGNAL column_not_found; MESSAGE 'Line following SIGNAL' TO CLIENT EXCEPTION WHEN column_not_found THEN MESSAGE 'Column not found handling' TO CLIENT; WHEN OTHERS THEN RESIGNAL; END; MESSAGE 'Outer compound statement' TO CLIENT; END; CALL InnerProc(); |
Interactive SQL [消息] 选项卡随后会显示以下内容:
Hello from InnerProc Column not found handling Outer compound statement |
在遇到导致错误的 SIGNAL 语句时,控制权会传递给复合语句的异常处理程序,并输出 [Column not found handling
] 消息。控制权然后传递回外部复合语句,并输出 [Outer compound statement
] 消息。
如果在内部复合语句中遇到了 [未找到列
] 以外的其它错误,则异常处理程序会执行 RESIGNAL 语句。RESIGNAL 语句将控制权直接传递回调用环境,不再执行其余的外部复合语句。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |