2011-10-21 自定义异常的捕获
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,http://www.itpub.net/thread-1499223-7-1.html70楼下列的哪些程序块在执行之后会显示:"Trapped!"注意:当你试图把字符串 "13-DEC-2004 6
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
搜小说软件开发
crm软件开发管理
上交招聘网络安全博士博士后
网络安全处置情况反馈表样例
wow晴日峰服务器
无锡锡山智能服务器施工
莱芜pc软件开发哪家好
服务器主机无限重启
oracle数据库回滚
决定软件开发任务分配的人
贵州计算机网络技术专业
成飞网络安全态势感知
警惕网络安全隐患标语
jdbc使用查询数据库
2008sql数据库连接失败怎么办
诚信经营桌面共享软件开发
数据库技术在社会生活中
北京新东方网络技术有限公司
计算机应用的主流网络技术
软件开发阶段的任务
网络安全的十大方针
车载网络技术的意义
共守网络安全的海报
软件开发人员外包价位
发型设计软件开发
软件开发企业成本分析
互联网科技行业赞助
虎丘区远程指导软件开发活动
校园网络安全管理措施
开源数据库抽取