2013-02-20 28 views
10

Tôi có thủ tục sau đây được sử dụng bởi một số ứng dụng:Làm cách nào để nâng cao lại ngoại lệ pl/sql trong khối xử lý ngoại lệ?

procedure p1 
is 
begin 
    bla bla bla; 
end; 

Nhưng không có khối xử lý ngoại lệ. Vì vậy, các ứng dụng được viết theo tính năng này.

Bây giờ tôi cần ghi lại lỗi trong p1. Nhưng nó không ảnh hưởng đến các ứng dụng sử dụng thủ tục này.

Something như thế này:

procedure p1 
is 
begin 
    bla bla bla; 

    exception when others then 
    log_error(sqlcode, sqlerrm); 
    raise_new_exception (sqlcode, sqlerrm); 
end; 

Trong trường hợp raise_application_error tham số đầu tiên phải ở trong phạm vi [-20.000, -20.999]. Vì vậy, nếu có ngoại lệ no_data_found, nó không thể làm tăng lỗi này.

Trong trường hợp exception_init, tham số thứ hai không được thay đổi. Nó phải là chữ số.

PS: giải pháp Như tạm thời, tôi đang sử dụng thực hiện ngay lập tức

Trả lời

21

Nếu lỗi của bạn giữ nguyên, thay đổi

... 
exception when others then 
    log_error(sqlcode, sqlerrm); 
    raise; 
end; 
/

này được giải thích in the documentation.

+1

@AlexPoole Liên kết đã chết. – ceving

+0

@ceving - cảm ơn, tôi đã đặt liên kết trực tiếp hiện tại vào câu trả lời để thay thế dễ dàng hơn trong tương lai. –

+1

Hiện tại [link] (http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/07_errs.htm#1049) –