講解Oracle數(shù)據(jù)庫自定義異常的使用方法
解決方法:
使用RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
error_number: 自定義的錯(cuò)誤編號(hào)。
error_msg:自定義的錯(cuò)誤內(nèi)容。
在使用的過程中,你可能會(huì)遇到了下面的問題。
ORA-21000: error number argument to raise_application_error of [xxxx] is out of range
出現(xiàn)此錯(cuò)誤的原因如下:
在存儲(chǔ)過程中定義的錯(cuò)誤代碼Number其實(shí)并不在Oracle數(shù)據(jù)庫所允許的范圍之內(nèi)。因?yàn)镺racle數(shù)據(jù)庫允許自定義的錯(cuò)誤代碼的范圍是-20000 -- -20999
這樣,就在Java端可以通過SQLException來捕獲異常。
雖然通過SQLException.getMessage()可以捕獲到異常的內(nèi)容,但是這些內(nèi)容對(duì)于開發(fā)比較有用。對(duì)于客戶來說,并不友好,也沒有多大意義。
通過SQLException.getErrorCode()可以捕獲到自定義的異常錯(cuò)誤編號(hào)。然后我們就可以通過這個(gè)錯(cuò)誤編號(hào),自定義相應(yīng)的Message內(nèi)容,返回給客戶。
下面我們來介紹另一種解決方法:
通過存儲(chǔ)過程返回值,你可以直接把錯(cuò)誤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:略去中間的調(diào)用存儲(chǔ)過程的步驟
if(result != null && result.startsWith('ERR:'))
// 從result中解析出Message_id,顯示Message到前臺(tái)
