异常处理 / 用户生成的异常 |
图: 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 例程的例程创建一个错误。