博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle获取异常的具体出处dbms_utility.format_error_backtrace
阅读量:4687 次
发布时间:2019-06-09

本文共 1674 字,大约阅读时间需要 5 分钟。

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE :返回当前异常相应的描述,通过它就能知道异常的最初生成处。

                                系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程。这个函数对错误的定位和实施下一步处理起着至关重要的作用。

 

 

DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 

系统为最近一次生成的异常设置了一个栈,并跟踪它的传递过程,而这个函数使用这个栈,然后返回该异常的整个传递过程。这个函数对错误的定位和实施下一步处理起着至关重要的作用。 

Create or replace procedure procl is 

Begin 

Dbms_output.put_line(‘running proc1’); 

Raise no_data_found; 

End; 

create or replace procedure proc2 is 

begin 

dbms_output.put_line(‘calling proc1’); 

proc1; 

end; 

create or replace procedure proc3 is 

begin 

dbms_output.put_line(‘calling proc2’); 

proc2; 

exception 

when no_data_found 

then 

dbms_output.put_line(‘error stack at top level’); 

dbms_output.put_line(dbms_utility.format_error_backtrace); 

end; 

现在可以运行 proc3 来看看结果。 

Sql>set serveroutput on; 

Sql>begin 

2 dbms_output.put_line(‘proc3->proc2->proc1 backtrace’); 

3 proc3; 

4 end; 

5 / 

Proc3 -> Proc2 -> Proc1 backtrace 

calling proc2 

calling proc1 

running proc1 

Error stack at top level: 

ORA-06512: at "SCOTT.PROC1", line 4 

ORA-06512: at "SCOTT.PROC2", line 5 

ORA-06512: at "SCOTT.PROC3", line 4 

事实上,每次异常的产生都将重置这个异常栈,只是最后一次从系统栈出栈的是最外层的程序块,所以可以清楚地看到异常生成的整个过程。上面这个程序的执行过程是这样的:首先用 put_line 打印 Proc3 -> Proc2 -> Proc1 backtrace , 调用 proc3 ,当前程序入栈 => 打印 calling proc2 ,调用 proc2 , proc3 入栈 => 打印 calling proc1 ,调用 proc1 , proc2 入栈 => 打印 running proc1 ,生成 no_data_found 异常,该异常被压入异常栈中 => proc2 出栈,并检测到来自第 5 行调用传递过来的异常,将它在此压入异常栈 => proc3 出栈,并检测到来自第 4 行调用传递过来的异常,将它在此压入异常栈, dbms_utility.format_error_backtrace 将异常栈中信息反相打印出来 => 最外层程序出栈, end 。

以下是正确使用这个函数的一些注意事项: 

ü 在当前程序的异常处理模块中调用这个函数。 

ü 避免在中间程序中使用异常处理模块。 

 

这样异常就能被正确地传输到最外层程序中,并打印出这个过程了。

转载于:https://www.cnblogs.com/WebApp-DotNet/p/7025730.html

你可能感兴趣的文章
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>
17_重入锁ReentrantLock
查看>>
winform窗口关闭提示
查看>>
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>