二十二 Oracle學習筆記 Oracle異常

2021-08-22 07:08:51 字數 1919 閱讀 2884

一、oralce異常

1.oracle低層定義了很多異常,每個異常都有乙個唯一的編碼,這些異常之中,有一些是比較常見的,oracle

給這些異常定義了名稱,可以直接使用,其他沒有名稱只有編碼的不能直接使用。

2.異常的分類

(1)預定義異常

既有編碼又有名稱的異常是預定義異常,此類異常可以直接使用

(2)非預定義異常

有編碼但沒有名稱的異常是非預定義異常,此類異常不能直接使用,要想使用需要先宣告乙個異常名與**繫結

(3)自定義異常

既沒有編碼也沒有名稱的異常時自定義異常,此類異常需要我們自己定義

3.異常的使用

(1)預定義異常的使用

--格式:

exception

when 異常名 then

--異常處理

--練習:使用too_many_rows預定義異常:多對一的情況,將乙個字段多個值存入乙個變數

declare

sal_a emp.sal%type;

begin

select sal into sal_a from emp;

exception 

when too_many_rows then

dbms_output.put_line('多行對一行,出現異常');

end;

/

(2)非預定義異常的使用

--格式:

declare 

--宣告異常

異常名 exception

--繫結異常編碼

pragma exception_init(異常名,編碼);

begin

exception

when 異常名 then

--異常處理

end;

/            

--練習,使用-01407非預定義異常(此編碼是修改主鍵為null發生的異常編碼)

declare 

null_id exception;

pragma exception_init(null_id,-01407);

begin

update emp set empno=null where empno=1001;

exception

when null_id then

dbms_output.put_line('主鍵為空');

end; 

/

(3)自定義異常的使用

--格式:

declare

--宣告異常

異常名 exception;

begin

--某條件發生時,丟擲異常

raise 異常名;

exception

when 異常名 then

--異常處理

end;

/--練習:定義進入浴池的年齡:大於18歲

create or replace function isornot(age number)

return number

isage18 exception;

begin

if age<18 then 

raise age18;    

end if;

return age;

exception 

when age18 then

dbms_output.put_line('你不能進入浴池'); 

return 0;   

end;

declare

a number; 

begin

a:=isornot(16);

end;

/

oracle學習筆記(二十二) REF 動態游標

宣告 cursor name sys refcursor 開啟動態游標 open cursor name is 查詢語句 關閉游標 close cursor name 宣告動態游標型別 type type name is ref cursor 宣告乙個動態游標變數 v cursor name typ...

c語言學習筆記二十二

自動處理標頭檔案的依賴關係 all test34 test34 test34.o test33.o test31.o gcc o test34.o test34.c test29.h test30.h test32.h test33.o test33.c test32.h test29.h test...

c語言學習筆記二十二

自動處理標頭檔案的依賴關係 all test34 test34 test34.o test33.o test31.o gcc o test34.o test34.c test29.h test30.h test32.h test33.o test33.c test32.h test29.h test...