異常情況處理(exception) 是用來處理正常執行過程中未預料的事件, 程式塊的異常處理預定義的錯誤 和 自定義錯誤, 由於 pl/sql 程式塊一旦產 生異常而沒有指出如何處理時, 程式就會自動終止整個程式執行.
異常錯誤可以分為三種型別:
1)預定義異常
2)非預定義異常
3)使用者自定義異常
這裡進行分別說明
例子:
set serveroutput on
declare
v_sal employees.salary%type;
begin
select e.salary into v_sal from employees e where e.department_id = 100;
dbms_output.put_line(v_sal);
exception
--預定義異常
when too_many_rows then dbms_output.put_line('得到的行數太多了!');
when others then dbms_output.put_line('出現其他型別錯誤!');
end;
/
結果:
首先必須對非定義的 oracle 錯誤進行定義。步驟如下:
1. 在 在 pl/sql 塊的定義部分定義異常情況:
《異常情況》 exception;
2. 將其定義好的異常情況,與標準的 oracle 錯誤聯絡起來,使用 pragma exception_init 語句:
pragma exception_init(< 異常情況》, < 錯誤**》);
3. 在pl/sql 塊的異常處理部分對異常情況做出相應處理。
例子:
set serveroutput on
declare
e_deleteid_exception exception;
pragma exception_init(e_deleteid_exception, -02292);
begin
delete from employees e where e.employee_id = 100;
exception
--非預定義異常
when e_deleteid_exception then dbms_output.put_line('違反完整約束條件!不可刪除此使用者。');
when others then dbms_output.put_line('出現其他型別錯誤!');
end;
/
當與乙個異常錯誤相關的錯誤出現時,就會隱含觸發該異常錯誤。 使用者定義的異常錯誤是通過顯式使用 raise 語句來觸發。當引發乙個異常錯誤時,控制就轉向exception 塊異常錯誤部分,執行錯誤處理**。
對於這類異常情況的處理,步驟如下:
1. 在 在 pl/sql 塊的定義部分定義異常情況:
< 異常情況》 exception;
2. raise < 異常情況》;
3. 在 pl/sql 塊的異常情況處理部分對異常情況做出相應的處理。
例子:
set serveroutput on
declare
e_too_low_sal exception;
v_sal employees.salary%type;
begin
select e.salary into v_sal from employees e where e.employee_id = 140;
if v_sal < 10000 then
raise e_too_low_sal;
end if;
exception
--使用者自定義異常
when e_too_low_sal then dbms_output.put_line('使用者工資低於10000。');
when others then dbms_output.put_line('出現其他型別錯誤!');
end;
/
Oracle PL SQL異常處理
case語句語法格式如下 case 變數 when 表示式1 then 值1 when 表示式2 then 值2 when 表示式n then 值n else 值n 1 end 1 使用case語句寫乙個pl sql塊,要求輸入員工編號,根據員工的職位進行工資提公升,提公升要求如下 如果職位是cle...
Oracle PL SQL異常處理
oracle的exception init編譯指令declare exception name exception pragma exception init exception name,error code 下面給乙個例項 declare v num number sv num v result...
ORACLE PLSQL 異常處理
例一 create table testerr id number 10 name varchar2 10 insert into testerr values 1,test insert into testerr values 2,test insert into testerr values 3...