|
在这篇小技巧中,介绍一下如何在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> 是不是很好用?
|