講解Oracle數據庫自定義異常的使用方法
解決方法:
使用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內容,返回給客戶。
下面我們來介紹另一種解決方法:
通過存儲過程返回值,你可以直接把錯誤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到前臺
