Oracle異常
一、異常
可以挽回的稱作異常,不可以挽回的叫錯(cuò)誤。
1.引發(fā)除0的異常
declare
v_a number:=100;
v_b number;
begin
v_b:=v_a/0;
dbms_output.put_line(v_b);
end;
2.捕獲異常
語(yǔ)法
declare
...聲明區(qū)...
begin
...編輯區(qū)...
exception
when 異常類型 then
異常處理
...
end;
練習(xí):捕捉除數(shù)是0的異常
除數(shù)是0異常類型:zero_divide
declare
v_a number:=100;
v_b number;
begin
v_b:=v_a/0;
dbms_output.put_line(v_b);
exception
when zero_divide then
dbms_output.put_line('您的除數(shù)為0了!默認(rèn)修改為1');
end;
練習(xí):當(dāng)主鍵中插入重復(fù)數(shù)據(jù)時(shí)的異常捕獲【必會(huì)】
begin
insert into dept(deptNo,dname,loc) values(40,'進(jìn)一部','天堂');
exception
when dup_val_on_index then
dbms_output.put_line('出現(xiàn)重復(fù)值,插入部門(mén)失敗');
end;
練習(xí):自定義異常,當(dāng)部門(mén)編號(hào)是負(fù)數(shù)時(shí)引發(fā)異常,并進(jìn)行捕獲
declare
my_dept_no_ex exception; /*聲明異常對(duì)象:my_dept_no_ex*/
pragma exception_init(my_dept_no_ex ,-1);? /*初始化異常對(duì)象的值,一般異常值是負(fù)整數(shù)(5位以內(nèi))*/
v_deptNo number;/*存儲(chǔ)數(shù)的部門(mén)編號(hào)變量聲明*/
begin
v_deptNo:=&v_deptNo;/*輸入一個(gè)部門(mén)編號(hào)存儲(chǔ)在v_deptNo變量中*/
if v_deptNo<0 then /*根據(jù)業(yè)務(wù)判讀引發(fā)自定義異常的條件*/
raise my_dept_no_ex; /*raise拋出異常對(duì)象*/
end if;
insert into dept(deptNo,dname,loc) values(v_deptNo,'忒一部','海洋');
commit;
exception /*異常處理*/
when my_dept_no_ex then /*捕獲指定類型的異常對(duì)象!*/
dbms_output.put_line('您輸入的部門(mén)編號(hào)不合理,無(wú)法注冊(cè)此部門(mén)!');
end;