以前常用 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: 數字或值錯誤: 字元到數字轉換錯誤
這樣, 當有錯誤時, 就能夠更快找到問題位置, 進行修正.
