使用 RAISE EXCEPTION 来退出嵌套的代码

下图展示您可如何使用 RAISE EXCEPTION 语句来退出深度嵌套的块。

图: RAISE EXCEPTION 语句。

BEGIN
          ON EXCEPTION IN (1)
          END EXCEPTION WITH RESUME -- do nothing significant (cont)
          
          BEGIN
          FOR i IN (1 TO 1000)
          FOREACH select ..INTO aa FROM t
          IF aa < 0 THEN
          RAISE EXCEPTION 1;     -- emergency exit
          END IF
          END FOREACH
          END FOR
          RETURN 1;
          END 
          
          --do something;               -- emergency exit to
          -- this statement.
          TRACE 'Negative value returned';
          RETURN -10;
          END

如果最内层的条件为真(如果 aa 为负),则发生异常,且执行跳至跟在该块的 END 之后的代码。在此情况下,执行跳至 TRACE 语句。

请记住,BEGINEND 块为单个语句。如果在块中的某处发生错误,且在该块之外捕获,则当执行恢复时,跳过该块剩余的部分,并从下一语句开始执行。

除非您在该块的某处为此错误设置捕获,否则,将错误条件传回至包含该调用的块,并传回至包含该块的任何块。如果不存在设置处理该错误的 ON EXCEPTION 语句,则停止该 SPL 例程的执行,为正在执行该 SPL 例程的例程创建一个错误。