可以捕获报错的sql语句的触发器
来源:互联网 发布:sql实例名称无效 编辑:程序博客网 时间:2024/05/17 20:21
提供一个思路,很多东西都可以套
有的时候,系统会出现一些错误(比如:ORA-01652: unable to extend temp segment by 128 in tablespace TEMP),
但是我们不知道是哪个SQL出问题了,这个时候可以用创建触发器捕获引发错误的SQL
create table error_tab(username varchar2(100),errorcode varchar2(200),errortext varchar2(200),sql_text varchar2(4000));
create or replace trigger error_trigger
after servererror on database
declare
n number;
full_text varchar2(4000);
sql_text ora_name_list_t;
d_current_nr_error number := ora_server_error(1);
ora_server_error_msg varchar2(100);
begin
n := ora_sql_txt(sql_text);
ora_server_error_msg := SQLERRM(-d_current_nr_error);
FOR i IN 1 .. n LOOP
full_text := full_text || sql_text(i);
END LOOP;
insert into error_tab
values
(user, d_current_nr_error, ora_server_error_msg, full_text);
end;
/
比如
SQL> select 1/0 from dual;
select 1/0 from dual
*
第 1 行出现错误:
ORA-01476: 除数为 0
SQL> select * from error_tab;
USERNAME ERRORCODE ERRORTEXT SQL_TEXT
-------------------- -------------------- ---------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------
SYS 1476 ORA-01476: 除数为 0 select 1/0 from dual
但是我们不知道是哪个SQL出问题了,这个时候可以用创建触发器捕获引发错误的SQL
create table error_tab(username varchar2(100),errorcode varchar2(200),errortext varchar2(200),sql_text varchar2(4000));
create or replace trigger error_trigger
after servererror on database
declare
n number;
full_text varchar2(4000);
sql_text ora_name_list_t;
d_current_nr_error number := ora_server_error(1);
ora_server_error_msg varchar2(100);
begin
n := ora_sql_txt(sql_text);
ora_server_error_msg := SQLERRM(-d_current_nr_error);
FOR i IN 1 .. n LOOP
full_text := full_text || sql_text(i);
END LOOP;
insert into error_tab
values
(user, d_current_nr_error, ora_server_error_msg, full_text);
end;
/
比如
SQL> select 1/0 from dual;
select 1/0 from dual
*
第 1 行出现错误:
ORA-01476: 除数为 0
SQL> select * from error_tab;
USERNAME ERRORCODE ERRORTEXT SQL_TEXT
-------------------- -------------------- ---------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------
SYS 1476 ORA-01476: 除数为 0 select 1/0 from dual
0 0
- 可以捕获报错的sql语句的触发器
- 怎样找到sql报错的存储过程和触发器及语句
- wireshark报没有可以捕获的接口
- sql语句报错:“不是可以识别的内置函数名称”
- ADO与SQL触发器报错的问题
- 触发器获取修改表的SQL语句
- sql server 创建触发器的语句格式
- sql触发器语句的构写
- 基于触发器的事件捕获
- trigger中捕获发生错误的sql语句
- SQL语句的参数可以生僻点儿
- 可以删除重复记录的SQL语句
- sql 语句中可以并行的操作
- MySQL中捕获低效SQL语句的配置以及检测SQL语句效率的方法
- MySQL 查看表结构、索引、触发器 的SQL语句
- SQL语句中含有乘号报错的处理办法
- 捕获BDC报的错误
- sql语句报错
- 转载 Crontab的格式
- 【转载】fscanf和fprintf函数从文件中格式化读取double型数据
- 详解Oracle DELETE和TRUNCATE 的区别
- 问题相关
- 四个开源商业智能平台比较(五)
- 可以捕获报错的sql语句的触发器
- [Leetcode]Linked List Cycle II
- webview loadUrl() 弹出系统浏览器解决办法
- swift语言设计模式介绍-创建型模式
- selenium验证页面元素
- C++ 中可确定的内置类型的大小关系
- [Leetcode]Merge Two Sorted Lists
- Mac如何正确的卸载程序
- 快速排序(分治法实现的随机化版本)