ITPub博客

首页 > 数据库 > Oracle > PL/SQL每日一题:异常处理--WHEN子句

PL/SQL每日一题:异常处理--WHEN子句

原创 Oracle 作者:幕南风 时间:2014-07-03 13:42:04 0 删除 编辑

  题目:

              捕获除数为零的错误("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继续抛出,所以上层无法捕获

<!-- Baidu Button BEGIN -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1207943/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 理解物化视图(2)物化视图的基础概念和一般用法
下一篇: 数字转换为英文的函数
请登录后发表评论 登录
全部评论
腾讯数据库工程师

注册时间:2012-05-10

最新文章