ON EXCEPTION 语句的控制作用域

ON EXCEPTION 语句的作用域从紧跟在 ON EXCEPTION 语句之后的语句扩展,并结束于在其中发出 ON EXCEPTION 语句的语句块的末尾。如果 SPL 例程未包括显式的语句块,则作用域为该例程中所有后续的语句。

对于在 IN 子句中指定的异常(或对于所有异常,如果未指定 IN 子句的话),ON EXCEPTION 语句的作用域包括同一语句块内跟在 ON EXCEPTION 语句之后的所有语句。如果在那个块内嵌套其他语句块,则该作用域还包括跟在 ON EXCEPTION 语句之后的嵌套的语句块中的所有语句,以及在那些嵌套的块内嵌套的语句块中的任何语句。

下列伪代码展示在例程内该例程为有效的位置。 即,如果错误 201 发生在任何指示了的块中,则发生标号为 a201 的操作。

图: ON EXCEPTION 语句的控制作用域。

CREATE PROCEDURE scope()
            DEFINE i INT;
            . . .
            BEGIN          -- 开始语句块 A
            . . .
            ON EXCEPTION IN (201)
            -- 执行操作 a201
            END EXCEPTION
            BEGIN         -- 嵌套的语句块 aa
            -- 执行操作,a201 在此有效
            END
            BEGIN         -- 嵌套的语句块 bb
            -- 执行操作,a201 在此有效
            END  
            WHILE i < 10
            -- 执行某操作,a201 在此有效
            END WHILE
            
            END    -- 语句块 A 的末尾
            BEGIN           -- 开始语句块 B
            -- 执行某操作
            -- a201 在此 NOT 有效
            END     
            END PROCEDURE;