ON EXCEPTION 语句提供捕获任何错误的机制。
要捕获错误,请将一组语句包含在以 BEGIN 与 END 标记的语句块中,并在该语句块的
开头添加 ON EXCEPTION IN 语句。如果在跟在 ON EXCEPTION 语句之后的块中发生
错误,则您可采取恢复措施。
下图展示语句块内的 ON EXCEPTION 语句。
图: 捕获错误。
BEGIN
DEFINE c INT;
ON EXCEPTION IN
GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 332 -
(
-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 关键字,则执
行完全地退出当前的块。