对于oracle而言,当前块中的处理程序无法捕获引发的异常,因为声明中引发的异常
会立即传播到封闭块。
咱们的产品,可以在当前块中截获声明部分抛出的异常。例如:
DROP TABLE t2;
CREATE TABLE t2(c1 VARCHAR(200));
DROP PROCEDURE sp1;
CREATE OR REPLACE PROCEDURE sp1(X INT) IS
A EXCEPTION;
begin
GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 130 -
DECLARE -- 子块开始
i int := 10/X; -- 声明区发生异常(除以0)
BEGIN
NULL;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO t2 VALUES('咱们的产品可以在这里截获。');
END; -- 子块结束
EXCEPTION
WHEN OTHERS THEN
INSERT INTO t2 VALUES('oracle在这里截获');
end;
CALL sp1(0);
SELECT * FROM t2;