異常是程序執(zhí)行是出現(xiàn)的事件,它會打斷程序的正常執(zhí)行.
異常分以下幾類:
1.預(yù)定義異常,它是由plsql預(yù)先定義,如:
NO_DATA_FOUND,
TOO_MANY_ROWS
VALUE_ERROR
...................
2.非預(yù)定義異常,它是處理與預(yù)定義異常無關(guān)的錯誤.
要使用非預(yù)定義異常,要經(jīng)過以下三步:
1).定義異常標(biāo)識符
2).錯誤號與異常之間建立關(guān)聯(lián)
3).捕捉異常
例子:
declare
e_my_exception Exception;
pragma Exception_init(my_exception,-2220);
begin



..
Exception
when my_exception then



End;3.自定義異常,自定義異常是用戶自己定義的異常.自定義異常一般不是處理執(zhí)行發(fā)生的錯誤,而是處理業(yè)務(wù)規(guī)則錯誤.
要使用自定義異常,需要經(jīng)過以下幾個步驟:
1.定義異常
2.觸發(fā)異常
3.捕獲異常
例子:
declare
e_my_exception Exception;
pragma Exception_init(my_exception,-2220);
begin
update tableName set=name='hui' where id='1234'
if sql%notfound then
raise e_my_exception ;
end if;
Exception
when my_exception then



End;
4.異常處理函數(shù)
1.raise_application_error, 該過程只適用于數(shù)據(jù)庫子過程(過程,函數(shù),包觸發(fā)器).
2.sqlcode 捕獲錯誤碼
3.sqlerrm 捕獲錯誤消息
例子:
Begin
update


if sql%notfound then
raise_application_error(-20008,'沒有數(shù)據(jù)');
end if
Exception
when others then
dbms_out.put_line('錯誤號:'||sqlcode);
dbms_out.put_line('錯誤號:'||sqlerrm);
end;5.編譯警告
alter session set plsql_warnings='enable:all';