如果 ON EXCEPTION RESUME 子句出现在 CREATE PROCEDURE 语句中,则该过程会在发生错误时检查随后的语句。如果该语句处理错误,则过程继续执行,在导致错误的语句之后的下一语句恢复。当发生错误时,它不会将控制权返回给调用环境。
可以通过 on_tsql_error 选项设置修改使用 ON EXCEPTION RESUME 的过程的行为。
错误处理语句包括以下这些:
以下演示过程说明了在发生下面情况时的结果:应用程序调用过程 OuterProc,OuterProc 又调用过程 InnerProc,然后遇到错误。这些演示过程基于在本节前面部分中所使用的过程:
DROP PROCEDURE OuterProc; DROP PROCEDURE InnerProc; CREATE PROCEDURE OuterProc() ON EXCEPTION RESUME BEGIN DECLARE res CHAR(5); MESSAGE 'Hello from OuterProc.' TO CLIENT; CALL InnerProc(); SET res=SQLSTATE; IF res='52003' THEN MESSAGE 'SQLSTATE set to ', res, ' in OuterProc.' TO CLIENT; END IF END; CREATE PROCEDURE InnerProc() ON EXCEPTION RESUME BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE '52003'; MESSAGE 'Hello from InnerProc.' TO CLIENT; SIGNAL column_not_found; MESSAGE 'SQLSTATE set to ', SQLSTATE, ' in InnerProc.' TO CLIENT; END; CALL OuterProc(); |
Interactive SQL [消息] 选项卡随后会显示以下内容:
Hello from OuterProc. Hello from InnerProc. SQLSTATE set to 52003 in OuterProc. |
使用的执行路径如下所示:
OuterProc 执行并调用 InnerProc。
在 InnerProc 中,SIGNAL 语句指示一个错误。
MESSAGE 语句不是错误处理语句,因此控制将被传递回 OuterProc 并且不显示该消息。
在 OuterProc 中,跟随在错误后的语句将 SQLSTATE 值指派给名为 res 的变量。这是错误处理语句,因此过程的执行会继续并显示 OuterProc 消息。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |