题目
(原发表于 2011-5-3) 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。 每两周的优胜者可获得itpub奖励的技术图书一本。 以往旧题索引: http://www.itpub.net/forum.php?m ... eid&typeid=1808 原始出处: http://www.plsqlchallenge.com/ 作者:ga_myers 运行环境:SQLPLUS, SERVEROUTPUT已打开 注:本题给出答案时候要求给予简要说明才能得到奖品 我创建了如下的表: CREATE TABLE plch_errors (err_num number); 然后我创建了一个 SERVERERROR 触发器 (我的schema有所需的权限),它会记录错位堆栈顶端的错误代码。 CREATE OR REPLACE TRIGGER log_err AFTER SERVERERROR ON SCHEMA DECLARE v_num NUMBER; BEGIN v_num:=ora_server_error (1); INSERT INTO plch_errors (err_num) VALUES (ABS (v_num)); END; / 然后下列三个PL/SQL块被执行,抛出了VALUE_ERROR 和 TOO_MANY_ROWS异常。 DECLARE v_test VARCHAR2 (2); BEGIN v_test := '123'; END; / DECLARE v_test VARCHAR2 (2); BEGIN v_test := '123'; EXCEPTION WHEN OTHERS THEN NULL; END; / DECLARE v_test VARCHAR2 (3); BEGIN SELECT 'NO' INTO v_test FROM sys.DUAL UNION SELECT 'YES' FROM sys.DUAL; END; / 下列查询执行之后,输出显示什么? SELECT err_num FROM plch_errors ORDER BY err_num / (A) 1422 6502 (B) 1422 6502 6502 (C) 1422 (D) 6502 (E) 6502 6502 |
| |
| |
|
详解:
以下是一位的博客,讲解关于,servererror trigger,请原谅我的无知,不知道他是谁。地址如下:
http://www.adp-gmbh.ch/ora/sql/trigger/servererror.html
AFTER SERVERERROR
以下为官方文档对after servererror触发触发器的两点说明。
AFTER SERVERERROR Causes the database to fire the trigger whenever both of these conditions are true:
-
A server error message is logged.
-
Oracle relational database management system (RDBMS) determines that it is safe to fire error triggers.
Examples of when it is unsafe to fire error triggers include:
-
RDBMS is starting up.
-
A critical error has occurred.
-
ora_server_error(1)
Attribute | Return Type and Value | Example |
---|
ora_server_error ( position IN PLS_INTEGER ) | NUMBER: Error code at given position on error stack | INSERT INTO event_table
VALUES ('top stack error ' || ora_server_error(1)); |
(原发表于 2011-5-3) 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。 每两周的优胜者可获得itpub奖励的技术图书一本。 以往旧题索引: http://www.itpub.net/forum.php?m ... eid&typeid=1808 原始出处: http://www.plsqlchallenge.com/ 作者:ga_myers 运行环境:SQLPLUS, SERVEROUTPUT已打开 注:本题给出答案时候要求给予简要说明才能得到奖品 我创建了如下的表: CREATE TABLE plch_errors (err_num number); 然后我创建了一个 SERVERERROR 触发器 (我的schema有所需的权限),它会记录错位堆栈顶端的错误代码。 CREATE OR REPLACE TRIGGER log_err AFTER SERVERERROR ON SCHEMA DECLARE v_num NUMBER; BEGIN v_num:=ora_server_error (1); INSERT INTO plch_errors (err_num) VALUES (ABS (v_num)); END; / 然后下列三个PL/SQL块被执行,抛出了VALUE_ERROR 和 TOO_MANY_ROWS异常。 DECLARE v_test VARCHAR2 (2); BEGIN v_test := '123'; END; / DECLARE v_test VARCHAR2 (2); BEGIN v_test := '123'; EXCEPTION WHEN OTHERS THEN NULL; END; / DECLARE v_test VARCHAR2 (3); BEGIN SELECT 'NO' INTO v_test FROM sys.DUAL UNION SELECT 'YES' FROM sys.DUAL; END; / 下列查询执行之后,输出显示什么? SELECT err_num FROM plch_errors ORDER BY err_num / (A) 1422 6502 (B) 1422 6502 6502 (C) 1422 (D) 6502 (E) 6502 6502 答案:
详解:
http://blog.csdn.net/indexman/article/details/8023740/ 这里是对触发器的讲解。
以下是一位的博客,讲解关于,servererror trigger,请原谅我的无知,不知道他是谁。地址如下: http://www.adp-gmbh.ch/ora/sql/trigger/servererror.html AFTER SERVERERROR 以下为官方文档对after servererror触发触发器的两点说明。 AFTER SERVERERROR Causes the database to fire the trigger whenever both of these conditions are true:
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29074224/viewspace-2123458/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29074224/viewspace-2123458/