PLSQL 的異常處理

2021-06-29 04:05:02 字數 3038 閱讀 1351

任何一種程式語言中的異常處理部分都是比較重要的一部分,單獨學習一下。

一、異常的種類及基本用法:

1、預定義異常(總計21種,具體見文件)

使用方法:

begin

select

...

select

...

select

...

...exception 

when no_data_found 

then

...

常用型別:

no_data_found       --ora-01403--

未找到行

too_many_rows       --ora-01422--select into

語句返回多行資料

value_error         --ora-06502--

型別轉換錯誤

zero_divide         --ora-01476--

程式嘗試除以0

storage_error       --ora-06500--pl/sql

執行時記憶體溢位或記憶體不足

2、非預定義異常(exception_init )

方法一:

需要在declare中申明,申明後使用即與預定義異常相同

declare

e_deptno_remaining exception;

pragma

exception_init

(e_deptno_remaining, -

2292);

begin

...exception

when e_deptno_remaining

then

dbms_output.put_line( '

非預定義2292');

when others

then

dbms_output.put_line( 'others');

end ;

-2292必須是oracle自定義的錯誤號,前面加負號

如果需要自己設定,則必須在-20000——-20999之間

此方法無法定義異常資訊。

方法二:

錯誤號與錯誤資訊均可自己定義

且無需在declare和exception中宣告

declare

i int := 5;

begin

if i=5

then

/*-20000——-20999*/

, '自定義錯誤資訊

');

endif;

end;

3、自定義異常(分為declare、raise、exception三部分)

使用示例:

declare

i int

:= 3;

ex exception;

begin

ifi <=

2then

raise

ex;

else

dbms_output.put_line(i);                             

endif;

exception

when

ex then

dbms_output.put_line('***');

end;

二、注意使用others的異常類:

在exception中定義任何的異常後

盡量都使用when others

表示遭遇到除此之外的任何異常如何處理

exception

whenexception_name1 then

-- handler

sequence_of_statements1

whenexception_name2 then

-- another handler

sequence_of_statements2

...whenothersthen   

-- optional handler

sequence_of_statements3

end; 

另外,在exception中可以使用or鏈結

when over_limit or under_limit or value_error then

三、使用系統錯誤號和錯誤資訊

錯誤號----sqlcode;

錯誤資訊--sqlerrm;

declare

err_num   number;

err_msg   varchar2(100);

begin

...exception

when

others

then

err_num    :=sqlcode;

err_msg    := substr(sqlerrm, 1, 100);

dbms_output.put_line(err_num || '---' || err_msg);

end;

四、異常傳播的規則

首先,異常是會向他的外層進行傳遞的

即如果在當前子塊中未定義異常處理,則會傳遞到外層的異常處理

直到異常**獲或最終被拋棄

注:宣告中的異常必定無法被當前塊捕獲

declare

abc number(3):='abc';

...begin

...exception

whenothers

then

...end;----

即便使用

others

最終也無法捕獲

pl sql異常處理

丟擲異常 oracle有三種型別的異常錯誤 1 預定義 predefined 異常 oracle預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由oracle自動將其引發。2 非預定義 predefined 異常 即其他標準的oracle錯誤。對這種異常情況的處理,需要使用者在...

PLSQL 異常處理

1.異常塊begin pl sql塊 exception when no data found then 沒有找到資料 響應命令 when too many rows then 返回多行,隱式游標每次只能檢索一行資料 響應命令 when invalid number then 字元向數字轉換失敗 響...

plsql異常處理

1.在plsql 中 形式引數和 where 語句中的引數不能一樣,否則的話就就會出現個中莫名其妙的錯誤。function validate import supplier p task seq in number,任務號 p line num in number,行號 p vendor name ...