ORACLE異常處理:
在Oracle數據庫中主要分爲三類異常:
1,預定義的Oracle數據庫錯誤;
2,非預定義的Oracle數據庫錯誤;
3,用戶定義的錯誤;
----預定義異常 --在Oracle中已經預先定義好名稱的異常;
常見的有: no_data_found ; 沒有找到數據
too_many_rows; 找到太多數據
invalid_cursor; 失效的遊標
zero_divide; 除數爲零 捕捉異常方法--直接在異常處理程序中按名稱進行捕捉。通過用when 子句。
----非預定義異常--在數據庫中沒有定義異常名稱的異常;爲了捕捉到非預定義的異常,必須先創建一個異常名稱,然後將錯誤編號和剛剛創建的異常名稱關聯起來,這樣就可以在異常處理部分通過定義的異常名稱來捕捉這個異常了。
----用戶自定義異常 --當數據庫的一些情況不符合用戶的規定時,用戶人爲判斷的異常。需要在聲明部分定義異常的名稱,然後在執行體中,通過一些邏輯判斷決定是否違反了用戶的規則,如果違反,則調用raise命令人爲觸發剛纔定義的異常,並在異常處理部分捕捉到這個異常進行處理。
爲了能夠記錄發生的錯誤信息,Oracle提供了兩個相關函數:
1,sqlcode: 返回錯誤代碼
2,sqlerrm:返回與錯誤代碼關聯的消息
異常是自裏向外逐級傳遞的
案例1:如果empno的值不存在的時候取到將會是null,此時我們要進行捕獲
declare
v_ename varchar2(5);
v_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
dbms_output.put_line('僱員名:'||v_ename||'工資'||v_sal);
--異常處理
exception
when no_data_found then
dbms_output.put_line('朋友,你輸入的編號有誤!');
end;
/
Exception
When others then --異常祖宗
Rollback;
Exception
when others then
dbms_output.put_line("全項目-複製認購計劃數據異常!");
roolback;
excetpion
when no_data_found then
v_JIAOLOUJIHUANID:=null;