错误捕获与恢复

ON EXCEPTION 语句提供捕获任何错误的机制。

要捕获错误,请将一组语句包含在以 BEGIN 与 END 标记的语句块中,并在该语句块的开头添加 ON EXCEPTION IN 语句。如果在跟在 ON EXCEPTION 语句之后的块中发生错误,则您可采取恢复措施。

下图展示语句块内的 ON EXCEPTION 语句。

图: 捕获错误。

BEGIN
          DEFINE c INT;
          ON EXCEPTION IN
          (
          -206, -- 表不存在
          -217  -- 列不存在
          ) SET err_num
          
          IF err_num = -206 THEN
          CREATE TABLE t (c INT);
          INSERT INTO t VALUES (10);
          -- 在插入语句之后继续
          ELSE
          ALTER TABLE t ADD(d INT);
          LET c = (SELECT d FROM t);
          -- 在选择语句之后继续
          END IF
          END EXCEPTION WITH RESUME
          
          INSERT INTO t VALUES (10);  -- 如果 t 不存在,则失败
          
          LET c = (SELECT d FROM t);  -- 如果 d 不存在,则失败
          END

当发生错误时,SPL 解释器搜索捕获该错误的最内层 ON EXCEPTION 声明。捕获错误之后的第一个操作是重置该错误。当完成错误操作代码的执行时,且如果引起错误的 ON EXCEPTION 声明包括了 WITH RESUME 关键字,则以跟在产生了该错误的语句之后的语句自动地恢复执行。如果 ON EXCEPTION 声明未包括 WITH RESUME 关键字,则执行完全地退出当前的块。