[Oracle] - 使用 DBMS_UTILITY 查看異常詳情


DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
說明:這是在Oracle 10g數據庫引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE內置函數返回一個格式化的字符串堆棧,堆棧中的程序及其行號可以回溯到錯誤被最先拋出的那一行
范例:ORA-06512: at "DB.TEST", line 22

DBMS_UTILITY.FORMAT_ERROR_STACK
說明:這是在Oracle7中引入的,DBMS_UTILITY.FORMAT_ERROR_STACK 這個內置函數和SQLERRM一樣,返回的是和當前錯誤(SQLCODE返回的值)所關聯的錯誤信息。
范例:ORA-01476: divisor is equal to zero

DBMS_UTILITY.FORMAT_CALL_STACK
說明:這是在Oracle7中引入的,DBMS_UTILITY.FORMAT_CALL_STACK這個內置函數返回一個格式化的字符串,它顯示了執行調用堆棧:直至此函數的調用點處的所有過程或者函數的調用順序。換句話說,這個函數回答了這個問題:“我是怎么來到這里的?”
范例:

----- PL/SQL Call Stack -----
object line object
handle number name
00007FFA6A87CB30 31 function LTR.TEST_PAYMENT_LOGGING
00007FFA6A7C8268 3 anonymous block

 

SP 應用范例

create or replace procedure spTest(pId number, res out number) is
begin
  /* SQL query */
  commit;
  res := 1;
exception
  when others then DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);  DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_BACKTRACE:' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_STACK:' || DBMS_UTILITY.FORMAT_ERROR_STACK); DBMS_OUTPUT.PUT_LINE('FORMAT_CALL_STACK:' || DBMS_UTILITY.FORMAT_CALL_STACK); rollback;
    res := 0;
end;

SP 異常詳情

-1---ORA-00001: brott mot unik begransning (XXX.PK_YYY)
FORMAT_ERROR_BACKTRACE:ORA-06512: vid "XXX.TB", rad 23

FORMAT_ERROR_STACK:ORA-00001: brott mot unik begransning (XXX.PK_YYY)

FORMAT_CALL_STACK:----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
00007FFCBF6193E8        57  procedure XXX.TB
00007FFCCC9ECC98         3  anonymous block

 

轉載來源

http://www.cnblogs.com/pompeii2008/p/7382640.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM