Tôi đã bắt gặp mô hình này sau nhiều nghiên cứu, đập đầu và nghiến răng:
CREATE OR REPLACE PACKAGE BODY my_schema.package_name
IS
PROCEDURE foo
IS
BEGIN
-- Call stored procedures/functions that throw unhandled exceptions
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR! - '
|| DBMS_UTILITY.FORMAT_ERROR_STACK
|| DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END foo;
END;
DBMS_UTILITY.FORMAT_ERROR_STACK
dường như hàm cung cấp mã lỗi và thông báo và DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
dường như cung cấp dấu vết ngăn xếp trung thực đến tốt đẹp, hoàn chỉnh với số dòng và tên thủ tục được lưu trữ trong Oracle 10g ít nhất.
Tôi không chắc liệu những chức năng đó có sẵn trong Oracle 9i hay không. Tôi không thể tìm thấy nhiều thông tin về vấn đề này ngay cả đối với Oracle 10g, vì vậy tôi nghĩ ít nhất tôi sẽ đăng câu trả lời này vì 9i đã khá cũ (và vì vậy nó là 10g cho vấn đề đó).