2013-02-20 60 views
10

我有以下程序所使用的一些應用程序:如何在異常處理塊中重新引發pl/sql異常?

procedure p1 
is 
begin 
    bla bla bla; 
end; 

但是沒有異常處理塊。所以應用程序是根據此功能編寫的。

現在我需要在p1中記錄錯誤。但它不應該影響使用此過程的應用程序。

像這樣:

procedure p1 
is 
begin 
    bla bla bla; 

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

RAISE_APPLICATION_ERROR第一參數的情況下,應在範圍[-20000,-20999]。所以如果引發異常no_data_found,它不會引發這個錯誤。

如果是exception_init,則第二個參數不應該是可變的。它必須是數字文字。

PS:作爲臨時的解決方案,我用執行即時

回答

21

如果你的錯誤保持這種解釋in the documentation相同,變化

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

+1

@AlexPoole鏈接已死。 – ceving 2014-10-16 14:52:28

+0

@ceving - 謝謝,我將當前的實時鏈接放入了答案中,而不是將來更容易更新。 – 2014-10-16 15:08:27

+1

當前[link](http://docs.oracle.com/cd/B10501_01/appdev.920/a96624/07_errs.htm#1049) – 2015-03-13 21:41:30