2011-10-21 自定义异常的捕获
发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,http://www.itpub.net/thread-1499223-7-1.html70楼下列的哪些程序块在执行之后会显示:"Trapped!"注意:当你试图把字符串 "13-DEC-2004 6
千家信息网最后更新 2024年10月11日2011-10-21 自定义异常的捕获
http://www.itpub.net/thread-1499223-7-1.html
70楼
下列的哪些程序块在执行之后会显示:"Trapped!"
注意:当你试图把字符串 "13-DEC-2004 6:56 PM" 使用掩码 "DD-MON-YYYY HH:MI:SS" 转换成日期型时,Oracle 会抛出 ORA-01858 错误。
(A)
DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS'));EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;/
SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DBMS_OUTPUT.put_line ( 6 TO_DATE ('13-DEC-2004 6:56 PM' 7 , 'DD-MON-YYYY HH:MI:SS')); 8 EXCEPTION 9 WHEN e1 10 THEN 11 DBMS_OUTPUT.put_line ('Trapped!'); 12 END; 13 /DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS'));EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-01843: 无效的月份ORA-06512: 在 line 5SQL>
(B)
DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DECLARE e2 EXCEPTION; PRAGMA EXCEPTION_INIT (e2, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;/
SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DECLARE 6 e2 EXCEPTION; 7 PRAGMA EXCEPTION_INIT (e2, -1858); 8 BEGIN 9 DBMS_OUTPUT.put_line ( 10 TO_DATE ('13-DEC-2004 6:56 PM' 11 , 'DD-MON-YYYY HH:MI:SS')); 12 END; 13 EXCEPTION 14 WHEN e1 15 THEN 16 DBMS_OUTPUT.put_line ('Trapped!'); 17 END; 18 /DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DECLARE e2 EXCEPTION; PRAGMA EXCEPTION_INIT (e2, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-01843: 无效的月份ORA-06512: 在 line 9SQL>
(C)
DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DECLARE e2 EXCEPTION; PRAGMA EXCEPTION_INIT (e2, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e2 THEN DBMS_OUTPUT.put_line ('Trapped!');END;/
SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DECLARE 6 e2 EXCEPTION; 7 PRAGMA EXCEPTION_INIT (e2, -1858); 8 BEGIN 9 DBMS_OUTPUT.put_line ( 10 TO_DATE ('13-DEC-2004 6:56 PM' 11 , 'DD-MON-YYYY HH:MI:SS')); 12 END; 13 EXCEPTION 14 WHEN e2 15 THEN 16 DBMS_OUTPUT.put_line ('Trapped!'); 17 END; 18 /DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DECLARE e2 EXCEPTION; PRAGMA EXCEPTION_INIT (e2, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e2 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-06550: 第 14 行, 第 9 列: PLS-00201: 必须声明标识符 'E2'ORA-06550: 第 0 行, 第 0 列: PL/SQL: Compilation unit analysis terminatedSQL>
(D)
DECLARE e1 EXCEPTION;BEGIN DECLARE PRAGMA EXCEPTION_INIT (e1, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;/
SQL> DECLARE 2 e1 EXCEPTION; 3 BEGIN 4 DECLARE 5 PRAGMA EXCEPTION_INIT (e1, -1858); 6 BEGIN 7 DBMS_OUTPUT.put_line ( 8 TO_DATE ('13-DEC-2004 6:56 PM' 9 , 'DD-MON-YYYY HH:MI:SS')); 10 END; 11 EXCEPTION 12 WHEN e1 13 THEN 14 DBMS_OUTPUT.put_line ('Trapped!'); 15 END; 16 /DECLARE e1 EXCEPTION;BEGIN DECLARE PRAGMA EXCEPTION_INIT (e1, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-06550: 第 2 行, 第 4 列: PLS-00700: 'E1' 的 PRAGMA EXCEPTION_INIT 必须在同一个声明部分中的异常错误声明之后ORA-06550: 第 5 行, 第 7 列: PL/SQL: Item ignoredSQL>
结果有出入,设置语言为英文后重跑
SQL> alter session set nls_language='american';Session alteredSQL> SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DBMS_OUTPUT.put_line ( 6 TO_DATE ('13-DEC-2004 6:56 PM' 7 , 'DD-MON-YYYY HH:MI:SS')); 8 EXCEPTION 9 WHEN e1 10 THEN 11 DBMS_OUTPUT.put_line ('Trapped!'); 12 END; 13 /Trapped!PL/SQL procedure successfully completedSQL>
SQL> alter session set nls_language='american';Session alteredSQL> SQL> SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DECLARE 6 e2 EXCEPTION; 7 PRAGMA EXCEPTION_INIT (e2, -1858); 8 BEGIN 9 DBMS_OUTPUT.put_line ( 10 TO_DATE ('13-DEC-2004 6:56 PM' 11 , 'DD-MON-YYYY HH:MI:SS')); 12 END; 13 EXCEPTION 14 WHEN e1 15 THEN 16 DBMS_OUTPUT.put_line ('Trapped!'); 17 END; 18 /Trapped!PL/SQL procedure successfully completedSQL>
SQL> alter session set nls_language='american';Session alteredSQL> SQL> SQL> DECLARE 2 e1 EXCEPTION; 3 PRAGMA EXCEPTION_INIT (e1, -1858); 4 BEGIN 5 DECLARE 6 e2 EXCEPTION; 7 PRAGMA EXCEPTION_INIT (e2, -1858); 8 BEGIN 9 DBMS_OUTPUT.put_line ( 10 TO_DATE ('13-DEC-2004 6:56 PM' 11 , 'DD-MON-YYYY HH:MI:SS')); 12 END; 13 EXCEPTION 14 WHEN e2 15 THEN 16 DBMS_OUTPUT.put_line ('Trapped!'); 17 END; 18 /DECLARE e1 EXCEPTION; PRAGMA EXCEPTION_INIT (e1, -1858);BEGIN DECLARE e2 EXCEPTION; PRAGMA EXCEPTION_INIT (e2, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e2 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-06550: line 14, column 9:PLS-00201: identifier 'E2' must be declaredORA-06550: line 0, column 0:PL/SQL: Compilation unit analysis terminatedSQL>
SQL> alter session set nls_language='american';Session alteredSQL> SQL> SQL> DECLARE 2 e1 EXCEPTION; 3 BEGIN 4 DECLARE 5 PRAGMA EXCEPTION_INIT (e1, -1858); 6 BEGIN 7 DBMS_OUTPUT.put_line ( 8 TO_DATE ('13-DEC-2004 6:56 PM' 9 , 'DD-MON-YYYY HH:MI:SS')); 10 END; 11 EXCEPTION 12 WHEN e1 13 THEN 14 DBMS_OUTPUT.put_line ('Trapped!'); 15 END; 16 /DECLARE e1 EXCEPTION;BEGIN DECLARE PRAGMA EXCEPTION_INIT (e1, -1858); BEGIN DBMS_OUTPUT.put_line ( TO_DATE ('13-DEC-2004 6:56 PM' , 'DD-MON-YYYY HH:MI:SS')); END;EXCEPTION WHEN e1 THEN DBMS_OUTPUT.put_line ('Trapped!');END;ORA-06550: line 2, column 4:PLS-00700: PRAGMA EXCEPTION_INIT of E1 must follow declaration of its exception in the same declarative partORA-06550: line 5, column 7:PL/SQL: Item ignoredSQL>
答案AB(设置语言为英文,则答案AB;如语言为中文,答案均不正确)
答案说明74楼
A: 正确捕获-1858异常B: 内层也定义了-1858但是没有捕获,所以外层仍然能够捕获到C: 内层的定义在外层是不可见的,会报PLS-00201: identifier 'E2' must be declaredD: PRAGMA EXCEPTION_INIT必须和EXCEPTION定义在同一层DECLARE中: PLS-00700: PRAGMA EXCEPTION_INIT of E1 must follow declaration of its exception in the same declarative part
答案
语言
内层
月份
错误
英文
外层
字符
字符串
日期
标识
标识符
程序
结果
部分
中文
会报
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳市网络安全协会谢朝霞
服务器里面的安全模式怎么设置
java怎样软件开发
拳头平台无法连接服务器
小学生学习网络安全教育
手抄报网络安全图
戴尔服务器磁盘丢失
怎么进入云服务器远程桌面
南宁一奇网网络技术有限公司
网络技术服务入什么科目
公司网络安全要多少钱
什么叫购买服务器
家具城数据库大作业说明书
火绒安全服务器异常该怎么办
实施项目经理转数据库开发
枣庄软件开发企业
邹平工资管理oa软件开发公司
怎么给数据库配置密码root
云顶手游哪个服务器水平高
网络安全保安局电话
一念逍遥服务器分类
北京麻将软件开发系统
csgo怎么看官匹服务器
用友没有数据库会怎么
中国gdp栅格数据库
网络安全最基本的设备
软件开发胜任条件
湖北省小学网络安全教
数据库挖掘技术有用吗
个人软件开发平台最新正式版