开发的朋友经常遇到的问题是:程序在EXCEPTION的WHEN OTHERS 中报了错,这是很头疼的问题,尤其在程序包很大的时候。。这个时候就需要迫切的知道到底是哪里发生了异常,这里介绍一个很好用的方法,可以准确的定位到你存储过程哪行报了异常,这就是:dbms_utility.format_error_backtrace 举个例子
1.新建程序包
create or replace package test_p is
PROCEDURE test_prc1;
PROCEDURE test_prc2;
PROCEDURE test_prc3;
end ;
create or replace package body test_p is
PROCEDURE test_prc1 IS
BEGIN
dbms_output.put_line('prc1 is running');
RAISE no_data_found;
END;
PROCEDURE test_prc2 IS
BEGIN
dbms_output.put_line('call prc1');
test_prc1;
END;
PROCEDURE test_prc3 IS
BEGIN
dbms_output.put_line('call prc2');
test_prc2;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('no_data_found happen');
dbms_output.put_l