Oracle中異常處理
錯誤處理
能夠檢測並且進行錯誤處理的叫做異常,一般分為使用者自定義異常,系統預定義異常。
預定義異常
一:除數是0的系統異常 declare v_number Number(2):=10; v_zero Number(2):=0; v_result Number(5); begin --v_number/v_zero,會產生系統異常 v_result:=v_number/v_zero; end; 二:處理上面的異常 declare v_number Number(2):=10; v_zero Number(2):=0; v_result
Number begin --v_number/v_zero,會產生系統異常 v_result:=v_number/v_zero; Exception when ZERO_DIVIDE THEN DBMS_OUTPUT.put_line('除數不能為0'); end; 三:多異常處理 declare v_result country.country_name%type; begin select country_name into v_result from country where country_name='BeiJing'; DBMS_OUTPUT.put_line( exception when TOO_MANY_ROWS then DBMS_OUTPUT.put_line('There is TOO_MANY_ROWS error'); when NO_DATA_FOUND then DBMS_OUTPUT.put_line('There is NO_DATA_FOUND error') END; |
常見的系統預定義異常
1 |
DUP_VAL_INDEX |
違反了唯一性 |
2 |
LOGIN_DENIED |
使用者名稱或密碼錯誤 |
3 |
NO_DATA_FOUND |
沒有發現數據 |
4 |
TOO_MANY_ROWS |
資料行太多 |
5 |
VALUE_ERROR |
演算法或轉換錯誤 |
自定義異常
呼叫自定義異常處理需要使用raise關鍵字處理
一:自定義異常過程 declare v_overNmber EXCEPTION; --定義異常處理變數 v_salesNumber Number(9); --當前的訂單數 v_maxNumber Number(9):=500; --定義允許的最大值 begin --從表中取出數量 selectcount(*) into v_salesNumber from sales; --比較當前單數和最大的單數的,如果超過最大單數,就進行異常處理 if v_maxNumber<v_salesNumber then --進行異常處理 raise e_overNumber; endif; exception when e_overNumber then DBMS_OUTPUT.put_line('查到的單數超過最大數,資料異常'); end; |