分享一个错误精确定位工具
时间:2011-09-10
来源:互联网
该工具主要用于定位过程、函数等报错时的错误信息以及出错的行,比使用sqlerrm方便快捷得多。
不出错时p_call_info也可以记录过程的调用信息。
支持10g以上版本。
代码如下:
create or replace procedure p_parse_stack_info
(
p_owner out varchar2, --max length 30
p_object_name out varchar2, --max length 30
p_call_info out varchar2, --max length 2000
p_error_info out varchar2, --max length 2000
p_trace_info out varchar2 --max length 2000
)
as
v_str varchar2(2000);
v_cnt number;
begin
p_call_info := dbms_utility.format_call_stack;
p_error_info := dbms_utility.format_error_stack;
p_trace_info := substrb(dbms_utility.format_error_backtrace, 1, 2000);
p_call_info := substr(p_call_info, instr(p_call_info, chr(10), 1, 4) + 1);
p_call_info := ltrim(REGEXP_REPLACE(REGEXP_REPLACE(chr(10)||p_call_info,
chr(10)||'.*?'||chr(32)||'|'||chr(32)||'[a-z]+?'||chr(32)),
chr(32)||'{2,}',
chr(10)),
chr(10));
v_cnt := length(p_call_info) - length(replace(p_call_info, chr(10)));
v_str := substr(p_call_info, instr(p_call_info, chr(10), 1, v_cnt - 2) + 1,
instr(p_call_info, chr(10), 1, v_cnt - 1) - 1 - instr(p_call_info, chr(10), 1, v_cnt - 2));
v_cnt := length(v_str) - length(replace(v_str, ' '));
v_str := substr(v_str, instr(v_str, ' ', 1, v_cnt) + 1);
v_cnt := instr(v_str, '.');
p_owner := substr(substr(v_str, 1, v_cnt - 1), 1, 30);
p_object_name := substr(substr(v_str, v_cnt + 1), 1, 30);
exception
when others then
null;
end;
不出错时p_call_info也可以记录过程的调用信息。
支持10g以上版本。
代码如下:
create or replace procedure p_parse_stack_info
(
p_owner out varchar2, --max length 30
p_object_name out varchar2, --max length 30
p_call_info out varchar2, --max length 2000
p_error_info out varchar2, --max length 2000
p_trace_info out varchar2 --max length 2000
)
as
v_str varchar2(2000);
v_cnt number;
begin
p_call_info := dbms_utility.format_call_stack;
p_error_info := dbms_utility.format_error_stack;
p_trace_info := substrb(dbms_utility.format_error_backtrace, 1, 2000);
p_call_info := substr(p_call_info, instr(p_call_info, chr(10), 1, 4) + 1);
p_call_info := ltrim(REGEXP_REPLACE(REGEXP_REPLACE(chr(10)||p_call_info,
chr(10)||'.*?'||chr(32)||'|'||chr(32)||'[a-z]+?'||chr(32)),
chr(32)||'{2,}',
chr(10)),
chr(10));
v_cnt := length(p_call_info) - length(replace(p_call_info, chr(10)));
v_str := substr(p_call_info, instr(p_call_info, chr(10), 1, v_cnt - 2) + 1,
instr(p_call_info, chr(10), 1, v_cnt - 1) - 1 - instr(p_call_info, chr(10), 1, v_cnt - 2));
v_cnt := length(v_str) - length(replace(v_str, ' '));
v_str := substr(v_str, instr(v_str, ' ', 1, v_cnt) + 1);
v_cnt := instr(v_str, '.');
p_owner := substr(substr(v_str, 1, v_cnt - 1), 1, 30);
p_object_name := substr(substr(v_str, v_cnt + 1), 1, 30);
exception
when others then
null;
end;
作者: homeworld80 发布时间: 2011-09-10
先收藏了,感谢楼主分享。
作者: xgghxkhuang 发布时间: 2011-09-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28