Thomas Zhang的杂货铺
24 02, 2008
如何在Exception Block中捕获异常发生所在行
作者 tomszrp 11:43 | Permalink 静态链接网址 | Comments 最新回复 (0) | Trackback 引用 (0) | 磨刀石

在这篇小技巧中,介绍一下如何在Exception Block中捕获错误发生的所在行,以便于我们准确的定位和解决问题。在实际的pl/sql开发过程中,有的pl/sql代码非常庞大,甚至彼此嵌套了好多层,当然了,Exception部分也就变的复杂起来。

 

这个时候,我们在日常运维或开发调试的时候,经常会根据Exception Block中抛出的raise去分析是程序的问题还是数据的问题,以便于后期改进和处理。那么有的人就很头疼,一组上K行的pl/sql,分析起来也是很头疼的,他们就希望能在出现异常的时候,知道准确的出错SQL所在行。

 

以前我们一般就简单的通过SQLCODE、SQLERRM来获取一些错误代码和相关的信息,从Oralce 9开始,我们可以借助DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() 函数来实现我们的目标。

 

下面我通过一个简单的DEMO来说一下如何调用这个函数:

conn study/study;
create table zrp (no int);
set serveroutput on

declare
  v_no number;
begin
  select no into v_no from zrp;
exception
  when others then
     dbms_output.put_line('SQL CODE:'||sqlcode||chr(10)||
                           sqlerrm||chr(10)||
                           dbms_utility.format_error_backtrace());
end;
/
测试一下看看:
SQL> declare
  2    v_no number;
  3  begin
  4    select no into v_no from zrp;
  5  exception
  6    when others then
  7       dbms_output.put_line('SQL CODE:'||sqlcode||chr(10)||
  8                             sqlerrm||chr(10)||
  9                             dbms_utility.format_error_backtrace());
 10  end;
 11  /

SQL CODE:100
ORA-01403: no data found
ORA-06512: at line 4


PL/SQL procedure successfully completed

SQL>  
是不是很好用?

Comments
发表评论
标题:


称呼:


邮箱地址(可选):


个人主页(可选):


发表评论:
Bold Italic Link authimage




博客日历
« 七月 2008 »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
搜索
最新发表
文章分类
文章归档
网站链接
新闻聚合