2011-11-21 未捕获异常

发布时间:2020-08-10 07:31:53 作者:hanaka
来源:ITPUB博客 阅读:112

http://www.itpub.net/thread-1499223-17-1.html

167楼

下列哪些选项在执行之后会导致未捕获的异常:

ORA-06502: PL/SQL: numeric or value error: number precision too large

(A)

DECLARE
   l_number   NUMBER (2) := 100;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
/
SQL> DECLARE
  2     l_number   NUMBER (2) := 100;
  3  BEGIN
  4     DBMS_OUTPUT.put_line (l_number);
  5  END;
  6  /
DECLARE
   l_number   NUMBER (2) := 100;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
ORA-06502: PL/SQL: 数字或值错误 :  数值精度太高
ORA-06512: 在 line 2
SQL>

(B)

DECLARE
   l_number   NUMBER (2) := 100;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('ERROR');
END;
/
SQL> DECLARE
  2     l_number   NUMBER (2) := 100;
  3  BEGIN
  4     DBMS_OUTPUT.put_line (l_number);
  5  EXCEPTION
  6     WHEN OTHERS
  7     THEN
  8        DBMS_OUTPUT.put_line ('ERROR');
  9  END;
 10  /
DECLARE
   l_number   NUMBER (2) := 100;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('ERROR');
END;
ORA-06502: PL/SQL: 数字或值错误 :  数值精度太高
ORA-06512: 在 line 2
SQL>

(C)

CREATE OR REPLACE PACKAGE plch_pkg
IS
   FUNCTION get_number
      RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY plch_pkg
IS
   g_date     DATE;
   g_number   NUMBER (2) := 100;
   FUNCTION get_number
      RETURN NUMBER
   IS
   BEGIN
      RETURN g_number;
   END;
BEGIN
   g_date := SYSDATE;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line ('ERROR');
END;
/
DECLARE
   l_number   NUMBER (2) := plch_pkg.get_number;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
/
SQL> CREATE OR REPLACE PACKAGE plch_pkg
  2  IS
  3     FUNCTION get_number
  4        RETURN NUMBER;
  5  END;
  6  /
Package created
SQL> CREATE OR REPLACE PACKAGE BODY plch_pkg
  2  IS
  3     g_date     DATE;
  4     g_number   NUMBER (2) := 100;
  5  
  6     FUNCTION get_number
  7        RETURN NUMBER
  8     IS
  9     BEGIN
 10        RETURN g_number;
 11     END;
 12  BEGIN
 13     g_date := SYSDATE;
 14  EXCEPTION
 15     WHEN OTHERS
 16     THEN
 17        DBMS_OUTPUT.put_line ('ERROR');
 18  END;
 19  /
Package body created
SQL> DECLARE
  2     l_number   NUMBER (2) := plch_pkg.get_number;
  3  BEGIN
  4     DBMS_OUTPUT.put_line (l_number);
  5  END;
  6  /
DECLARE
   l_number   NUMBER (2) := plch_pkg.get_number;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
ORA-06502: PL/SQL: 数字或值错误 :  数值精度太高
ORA-06512: 在 "YOGA.PLCH_PKG", line 4
ORA-06512: 在 line 2
SQL>

(D)

CREATE OR REPLACE PACKAGE plch_pkg
IS
   g_number   NUMBER (2) := 100;
END;
/
DECLARE
   l_number   NUMBER (2) := plch_pkg.g_number;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
/
SQL> CREATE OR REPLACE PACKAGE plch_pkg
  2  IS
  3     g_number   NUMBER (2) := 100;
  4  END;
  5  /
Package created
SQL> DECLARE
  2     l_number   NUMBER (2) := plch_pkg.g_number;
  3  BEGIN
  4     DBMS_OUTPUT.put_line (l_number);
  5  END;
  6  /
DECLARE
   l_number   NUMBER (2) := plch_pkg.g_number;
BEGIN
   DBMS_OUTPUT.put_line (l_number);
END;
ORA-06502: PL/SQL: 数字或值错误 :  数值精度太高
ORA-06512: 在 "YOGA.PLCH_PKG", line 3
ORA-06512: 在 line 4
SQL>

答案在172楼

2011-11-21 答案:ABCD

如果异常发生在BEGIN之前,比如DECLARE部分或PACKAGE的变量初始化部分,那么这个异常就不会被当前块的EXCEPTION捕获,而是继续向外传播。

推荐阅读:
  1. java反射实现前端接收实体对象,去除“null”字符串
  2. VS code中关闭eslint

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

2011-11-21 异常 捕获

上一篇:填报脚本之轻松搞定复杂表的数据入库

下一篇:2018年人工智能创业公司“死亡名单”—泡沫下带给创业者的思考

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》