任何一種程式語言中的異常處理部分都是比較重要的一部分,單獨學習一下。
一、異常的種類及基本用法:
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 ...