2012-04-16 134 views
1
...PROCEDURE... 
..... 
WHEN DUP_VAL_ON_INDEX THEN 
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || SQLERRM); 
RAISE_APPLICATION_ERROR(-20021, 'Attempted to add duplicate primary key into table A2PROD'); 
..... 

結果:如何從raise_application_error()獲取信息?

-1 ORA-00001: unique constraint (SYSTEM.SYS_C004235) violated 

我想要顯示的結果爲:

-20021 ORA-20021 Attempted to add duplicate primary key into table A2PROD 

我試圖把DOPL的RAISE_APPLICATION_ERROR功能後,但仍無法正常工作。 我想提出一個應用程序錯誤並獲取錯誤消息和代碼以將它們打印到oracle開發人員的輸出控制檯。

回答

0

是否從另一個程序調用了發佈的過程?或者你以其他方式運行它?

RAISE_APPLICATION_ERROR將異常號及其消息傳遞給調用程序。那麼與異常做什麼?舉例來說,如果它有一個可憐的異常處理程序,像這樣...

 your_proc_here(p_new_id=>1); 
exception 
    when others then 
     null; 
end; 

...你永遠不會看到-20021錯誤,只是DBMS_OUTPUT輸出。

2

我並不完全相信我明白這個問題。如果DOPLdbms_output.put_line的縮寫,並且您希望SQLCODE爲-20021和SQLERRM爲「ORA-20021:試圖將重複的主鍵添加到表A2PROD中」,則需要將dbms_output.put_line調用放入捕獲的異常處理程序中您的自定義錯誤消息。你當然也可以做類似

WHEN dup_val_on_index 
THEN 
    l_err_code := -20021; 
    l_err_msg := 'Attempted to add duplicate primary key into table A2PROD'; 
    dbms_output.put_line(l_err_code || ' ' || l_err_msg); 
    raise_application_error(l_err_code, l_err_msg); 
END;