问题描述
- 关于Oracle的异常处理
-
DECLARE
null_salary EXCEPTION;
PRAGMA EXCEPTION_INIT (null_salary, -20101);
BEGIN
RAISE_APPLICATION_ERROR(-20101,'有异常a');
EXCEPTION
WHEN null_salary THEN
dbms_output.put_line('b');
RAISE_APPLICATION_ERROR(-20101,'有异常b');
END;
这样输出异常b会执行exception中的代码。为什么会忽略异常a呢?
DECLARE
null_salary EXCEPTION;
PRAGMA EXCEPTION_INIT (null_salary, -20101);
BEGIN
RAISE_APPLICATION_ERROR(-20103,'有异常a');
EXCEPTION
WHEN null_salary THEN
dbms_output.put_line('b');
RAISE_APPLICATION_ERROR(-20101,'有异常b');
END;
这样会输出异常a,但是这个异常是没有预先定义的。请问代码1段的那种情况怎么合理的避免或者运用呢?这种值栈当中的覆盖会引起逻辑上的混乱吗?如果我不小心抛出了同样的异常是会引起exception的代码能执行,这种情况在开发中有办法避免吗吗?
时间: 2024-12-24 00:58:30