最近在進行專案開發時,根據業務邏輯在處理資料時,需要返回Message並阻止程式繼續執行。但是,在儲存過程使用Oracle的Raise根本無法滿足要求。
於是用到了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
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到前臺