首页 > 数据库 > Oracle > PL/SQL每日一题:异常处理--WHEN子句
题目:
捕获除数为零的错误("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继续抛出,所以上层无法捕获
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1207943/ ,如需转载,请注明出处,否则将追究法律责任。