以前常用 SQLCODE 與 SQLERRM 抓取錯誤訊息, 如下範例 :
程式碼
DECLARE V_NUM NUMBER; BEGIN V_NUM := 'tomkuo139@gmail.com'; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( '錯誤: ' || SQLCODE || ' ~ ' || SQLERRM ); END; -- 結果顯示 錯誤: -6502 ~ ORA-06502: PL/SQL: 數字或值錯誤: 字元到數字轉換錯誤
而在 10g 以後的版本, 提供了
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
與
DBMS_UTILITY.FORMAT_ERROR_STACK,
讓錯誤訊息也包括錯誤行號, 如下範例 :
程式碼
DECLARE V_NUM NUMBER; BEGIN V_NUM := 'tomkuo139@gmail.com'; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( '錯誤: ' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE || DBMS_UTILITY.FORMAT_ERROR_STACK ); END; -- 結果顯示 錯誤: ORA-06512: 在 line 4 ORA-06502: PL/SQL: 數字或值錯誤: 字元到數字轉換錯誤
這樣, 當有錯誤時, 就能夠更快找到問題位置, 進行修正.