题目:
捕获除数为零的错误("ORA-01476: divisor is equal to zero")并且在这种情况下显示 "Bad division"
所有的其他异常都必须原封不动地传播到调用块
换句话说,如果我加入下列异常处理部分然后执行如下代码块:
BEGIN
plch_proc (0);
plch_proc (-1);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('All handled');
END;
/
随后我应该在屏幕上看到如下输出:
Bad division
All handled
(A)
EXCEPTION
WHEN 'ORA-01476'
THEN
DBMS_OUTPUT.put_line ('Bad division');
(B)
EXCEPTION
WHEN ZERO_DIVIDE
THEN
DBMS_OUTPUT.put_line ('Bad division');
(C)
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE = -01476
THEN
DBMS_OUTPUT.put_line ('Bad division');
ELSE
RAISE;
END IF;
(D)
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE = 1476
THEN
DBMS_OUTPUT.put_line ('Bad division');
END IF;
(E)
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE = -1476
THEN
DBMS_OUTPUT.put_line ('Bad division');
END IF;
答案:
选择:BC
A: 语法错误,WHEN后面必须跟着已定义好的异常,可以是系统定义或自定义
B: ZERO_DIVIDE是系统定义异常
C: 通过WHEN OTHERS捕获了所有异常并对其中一种错误代码进行处理,其他的继续抛出,所以上层还能捕获到其他异常
D: 错误代码写得不对
SQLCODE一般返回负数,处理这几种情况:
① 没有异常(返回0)
② 用户自定义异常而且没有用EXCEPTION_INIT和一个错误代码关联
此时返回1用户自定义异常而且没有用EXCEPTION_INIT和一个错误代码关联(此时返回1)
③ NO_DATA_FOUND(SQLCODE返回100)
E: 和C的区别是没有用RAISE继续抛出,所以上层无法捕获