最近在進行專案開發時,根據業務邏輯在處理資料時,需要返回Message並阻止程式繼續執行。但是,在儲存過程使用OracleRaise根本無法滿足要求。
     於是用到了RAISE_APPLICATION_ERROR
     RAISE_APPLICATION_ERROR ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);


      error_number: 自定義的錯誤編號。


      error_msg
:自定義的錯誤內容。
     在使用過程中,遇到了下面的問題。
ORA-21000: error number argument to raise_application_error of [xxxx] is out of range
出現這個錯誤的原因是:在儲存過程中定義的錯誤程式碼Number不在Oracle所允許的範圍之內。
      Oracle允許自定義的錯誤程式碼的範圍為-20000 — -20999

     
這樣,就在Java端可以通過SQLException來捕獲異常。
     
雖然通過SQLException.getMessage()可以捕獲到異常的內容,但是這些內容對於開發比較有用。對於客戶來說,並不友好,也沒有多大意義。
     通過SQLException.getErrorCode()可以捕獲到自定義的異常錯誤編號。然後就可以,通過這個錯誤編號,自定義相應的Message內容,返回給客戶了。

 

還有1個辦法,就是儲存過程返回值。可以直接把錯誤Message定義在返回值中間。這樣Java端解析後,直接就可以取得Message程式碼了。
If  condition then
   p_result := `ERR:MSG2061`;
end if;
if  substr(p_result, 1, 3)  = `ERR` then
    ROLLBACK;
else
    p_result = `OK`;
end if;
 
Java:略去中間的呼叫儲存過程的步驟
if(result != null && result.startsWith(“ERR:”))
 // 從result中解析出Message_id,顯示Message到前臺