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继续抛出,所以上层无法捕获

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值