--oracle异常返回完整信息,具体见最后附
--当然最好选取返回的信息连同代码其他相关信息
--如发生对象名、时间等插入预建备查错误表
--11:08 2007-11-26 edit by inreyou
declare
strName Varchar2(20);
begin
strName := 'DataNotFound'; --DataNotFound
if strName = 'DivideIsZero' then
RAISE ZERO_DIVIDE;
elsif strName = 'DataNotFound' then
RAISE NO_DATA_FOUND;
end if;
exception
when ZERO_DIVIDE then
dbms_output.put_line('EXCEPTION IN ZERO_DIVIDE');
when others then
dbms_output.put_line('EXCEPTION IN OTHERS');
dbms_output.put_line(chr(13) || chr(10) || 'SQLCODE:');
dbms_output.put_line(SQLCODE);
dbms_output.put_line(chr(13) || chr(10) || 'SQLERRM:');
dbms_output.put_line(SQLERRM);
dbms_output.put_line(chr(13) || chr(10) ||
'DBMS_UTILITY.FORMAT_ERROR_STACK(完整的错误消息):');
dbms_output.put_line(DBMS_UTILITY.FORMAT_ERROR_STACK);
dbms_output.put_line(chr(13) || chr(10) ||
'DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(发生异常时异常点的堆栈信息):');
dbms_output.put_line(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
dbms_output.put_line(chr(13) || chr(10) ||
'DBMS_UTILITY.FORMAT_CALL_STACK(程序当前执行点的堆栈信息):');
dbms_output.put_line(DBMS_UTILITY.FORMAT_CALL_STACK);
end;
/*
附:
EXCEPTION IN OTHERS
SQLCODE:
100
SQLERRM:
ORA-01403: 未找到数据
DBMS_UTILITY.FORMAT_ERROR_STACK(完整的错误消息):
ORA-01403: 未找到数据
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(发生异常时异常点的堆栈信息):
ORA-06512: 在 line 12
DBMS_UTILITY.FORMAT_CALL_STACK(程序当前执行点的堆栈信息):----- PL/SQL Call Stack ----- object line object handle number name673AAB40 46 anonymous block*/