一、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...