天天看點

oracle plsql exception例外

以下plsql程式用的scott使用者的dept,emp表。

not_data_found例外:

--系統列外
set serveroutput on

declare

  pename emp.ename%type;
  
begin

  select ename into pename  from emp where empno =1234;
  
exception
  when no_data_found then dbms_output.put_line('沒有查到資料');
  when others then dbms_output.put_line('其他');
  
end;
/      

too_many_rows例外:

1 --系統例外: too_many_rows
 2 
 3 set serveroutput on
 4 declare
 5 
 6   pename emp.ename%type;
 7 
 8 begin
 9 
10   select ename into pename from emp where deptno = 10;
11 
12 exception
13   when too_many_rows then dbms_output.put_line('select into 比對多行');
14   when others  then dbms_output.put_line('其他');
15 end;
16 /      

算數或轉換例外:

1 --系統例外 : value_error
 2 
 3 set serveroutput on
 4 
 5 declare
 6   
 7   pnum number;
 8 begin
 9   pnum := 'abc';
10   
11 exception
12   when value_error then dbms_output.put_line('算術或轉換錯誤');
13   when others then dbms_output.put_line('其他');
14 end;
15 /      

0不能做除數例外:

1 --系統例外 zero_divide
 2 set serveroutput on
 3 
 4 declare
 5 
 6   pnum number;
 7 begin
 8 
 9   pnum := 1/0;
10   
11 exception
12   when zero_divide then dbms_output.put_line('0不能做除數');
13   when others then dbms_output.put_line('其他');
14 end;
15 /      

自定義例外:

--自定義例外: 

set serveroutput on

declare

  cursor cemp is select ename from emp where deptno =50;
  pename emp.ename%type;

  --自定義列外
  not_emp_data exception;
  
begin
  open cemp;
    
  fetch cemp into pename;
  
  if cemp%notfound then
      raise not_emp_data;
  end if;
  --如果程式程式中出現例外,oracle會通過pmon(process monitor)自動關閉清理資源
  close cemp;  

exception 
  when not_emp_data then dbms_output.put_line('自定義例外:沒有查詢到資料');
  when others then dbms_output.put_line('其他列外');
end;
/      

知識點出處:http://www.imooc.com/learn/360