1. 程式人生 > >Oracle中異常處理

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

(5);

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(

'the  country  name  is '||v_result);

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;