当出现错误时,数据库服务器搜索捕获错误代码的最后一个 ON EXCEPTION 语句。如果数据库服
务器找不到相关 ON EXCEPTION 语句,则错误代码传回调用上下文(SPL 例程、应用程序或交
互用户),执行终止。
在前面的示例中,在指定错误 -206 的 IN 子句中需要减号(-),大多数错误代码都是负整数。
下一示例使用了两个具有相同错误号的 ON EXCEPTION 语句,因而可以在两个嵌套级别中捕获错误
代码 691 。除了标有 { 6 } 的 DELETE 语句,所有其它 DELETE 语句都在第一个 ON EXCEPTION
语句的作用域中。标有 { 1 } 和 { 2 } 的 DELETE 语句都在内部 ON EXCEPTION 语句的作用域
中:
CREATE PROCEDURE delete_cust (cnum INT)
ON EXCEPTION IN (-691) -- children exist
BEGIN -- Begin-end so no other DELETEs get caught in here.
ON EXCEPTION IN (-691)
DELETE FROM another_child WHERE num = cnum; { 1 }
DELETE FROM orders WHERE customer_num = cnum; { 2 }
END EXCEPTION -- for error -691
DELETE FROM orders WHERE customer_num = cnum; { 3 }
END
DELETE FROM cust_calls WHERE customer_num = cnum; { 4 }
DELETE FROM customer WHERE customer_num = cnum; { 5 }
END EXCEPTION
DELETE FROM customer WHERE customer_num = cnum; { 6 }
END PROCEDURE




