oracle異常處理明細

2021-09-01 15:03:21 字數 2548 閱讀 6825

**:

異常處理是針對系統中發生的各種錯誤所採取的處理措施。 

pl/sql塊中的異常處理 

sql**  

exception   

when first_exception then

first exception>  

when second_exception then

second exception>  

when others then

在異常處理中,用來獲取異常**和完整錯誤提示資訊的兩個子系統函式是sqlcode和sqlerrm。 

對系統內部異常可通過sqlcode返回乙個oracle錯誤編碼號。sqlcode返回的編號除了「ora_01403沒發現資料」是正值之外,其他的都是負值。 

sqlerrm則返回異常**相對應的錯誤資訊。對使用者定義的異常,sqlcode返回+1而且sqlerrm返回「使用者定義異常」。如果沒有異常發生,操作正常執行,則sqlcode返回0,sqlerrm返回資訊「ora_0000:正常,成功完成」。 

非預定義的oracle異常 

pragma exception_init(,) 

在pl*sql中,pragma exception_init告訴編譯器將乙個oracle錯誤編號與異常名建立起來 

sql**  

pragma exception_init的用法  

declare

e_emp_remaining exception;  

pragma exception_init(e_emp_remaining ,-2292);  

begin

delete

from dept where deptno=10;  

commit;  

exception   

when (e_emp_remaining then

dbms_output.put_line('cannot remove dept'||to_char(10)||'.employee exist.');  

end;  

使用者自定義異常 

sql**  

declare

v_eno emp.empno%type :=&.empno;  

not_found exception;  

begin

update emp set sal=sal*1.1 where  empno=v_eno;  

if  sql% notfound then

raise not_found// 使用raise語句丟擲異常  

end if;  

exception  

when not_found then

dbms_output.put_line('you can't update the sal,the number does not!exist!');  

when others then

dbms_output.put_line('other other');  

end

sql**  

裡面的錯誤**和內容,都是自定義的。說明是自定義,當然就不是系統中已經命名存在的錯誤類別,是屬於一種自定義事務錯誤型別,才呼叫此函式。 

error_number_in 之容許從 -20000 到 -20999 之間,這樣就不會與 oracle 的任何錯誤**發生衝突。 

error_msg_in 的長度不能超過 2k,否則擷取 2k。 

舉個例吧: 

阻止小於18歲的使用者增加到資料庫 employee 表中 

sql**  

create

or repalce trigger minimun_age_check  

before insert

on employee  

for each row  

begin

if add_months( :new.birth_date, 18*12) > sysdate  

then

end if;  

end;  

在客戶端,你可以寫乙個類似下面的程式,來測試一下。 

sql**  

declare

no_babies_allowed exception;  

/*將名稱與用於觸發器中的錯誤號碼關聯起來*/  

pragma exception_init(no_babies_allowed, -20001);  

begin

insert

into employee ....;  

exception  

when no_babies_allowed  

then

/*  

*/  

dbms_output.put_line(sqlerrm);  

end;  

將異常作為控制語句

因為引發異常會將程式的控制邏輯轉移到**塊的異常處理部分,所以可以將raise語句用作控制語句,就像goto語句一樣。例如,如果我們有很深的巢狀迴圈,並需要立即從中退出的時候,這可能會非常有用。

oracle異常處理明細(個人簡單總結)

異常處理是針對系統中發生的各種錯誤所採取的處理措施。pl sql塊中的異常處理 sql exception when first exception then first exception when second exception then second exception when other...

ORACLE 異常處理

一 開發pl sql程式時,需要考慮到程式執行時可能出現的各種異常,當異常出現時,或是中斷程式執行,或是使程式從錯誤中恢復,從而繼續執行。常用的異常型別有 no data found 沒有發現資料 too many rows select into 語句查詢結果有多個資料行 others 可以捕捉所...

Oracle 異常處理

1 什麼是異常 在pl sql 中的乙個警告或錯誤的情形都可被稱為異常。包括編譯時錯誤 pls 和執行時錯誤 ora 乙個異常通常包含乙個錯誤 和錯誤文字,分別指示異常的編號和具體錯誤資訊。異常情況處理 exception 是用來處理正常執行過程中未預料的事件,程式塊的異常處理預定義的錯誤和自定義錯...