Oracle教程:PL/SQL引發(fā)應(yīng)用程序異常處理
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請(qǐng)盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請(qǐng)聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢Oracle教程:PL/SQL引發(fā)應(yīng)用程序異常處理,在Oracle開發(fā)中,遇到的系統(tǒng)異常都有對(duì)應(yīng)的異常碼,在應(yīng)用系統(tǒng)開發(fā)中,用戶自定義的異常也可以指定一個(gè)異常碼和異常信息,Oracle系統(tǒng)為用戶預(yù)留了自定義異常碼,其范圍介于-20000到-20999之間的負(fù)整數(shù)。引發(fā)應(yīng)用程序異常的語法是:
RAISE_APPLICATION_ERROR(異常碼,異常信息)
案例12:引發(fā)系統(tǒng)異常
代碼演示:引發(fā)應(yīng)用系統(tǒng)異常
SQL> DECLARE 2 sal emp.sal%TYPE; 3 myexp EXCEPTION; 4 BEGIN 5 SELECT sal INTO sal FROM emp WHERE
ename='JAMES'; 6 IF sal<5000 THEN 7 RAISE myexp; 8 END IF; 9 EXCEPTION 10 WHEN NO_DATA_FOUND THEN 11 dbms_output.put_line('NO RECORDSET
FIND!'); 12 WHEN MYEXP THEN 13
RAISE_APPLICATION_ERROR(-20001,'SAL IS TO LESS!'); ① 14 END; 15 / ORA-20001: SAL IS TO LESS! ② ORA-06512: 在 line 14 |
代碼解析:
① 引發(fā)應(yīng)用系統(tǒng)異常,指明異常碼和異常信息。
② 在控制臺(tái)上顯示異常碼和異常信息。
如果要處理未命名的內(nèi)部異常,必須使用OTHERS異常處理器。也可以利用PRAGMA EXCEPTION_INIT把一個(gè)異常碼與異常名綁定。
PRAGMA由編譯器控制,PRAGMA在編譯時(shí)處理,而不是在運(yùn)行時(shí)處理。EXCEPTION_INIT告訴編譯器將異常名與ORACLE錯(cuò)誤碼綁定起來,這樣可以通過異常名引用任意的內(nèi)部異常,并且可以通過異常名為異常編寫適當(dāng)?shù)漠惓L幚砥鳌RAGMA EXCEPTION_INIT的語法是:
PRAGMA EXCEPTION_INIT(異常名,異常碼)
這里的異常碼可以是用戶自定義的異常碼,也可以是Oracle系統(tǒng)的異常碼。
案例13:PRAGMA EXCEPTION_INIT異常
代碼演示:PRAGMA EXCEPTION_INIT異常
<<outterseg>> DECLARE null_salary EXCEPTION; PRAGMA
EXCEPTION_INIT(null_salary, -20101); ① BEGIN <<innerStart>> ② DECLARE curr_comm NUMBER; BEGIN SELECT comm INTO curr_comm
FROM emp WHERE empno = &empno; IF curr_comm IS NULL THEN
RAISE_APPLICATION_ERROR(-20101, 'Salary is missing'); ③ ELSE dbms_output.put_line('有津貼'); END IF; END; EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('沒有發(fā)現(xiàn)行'); WHEN null_salary THEN dbms_output.put_line('津貼未知');
④ WHEN OTHERS THEN dbms_output.put_line('未知異常'); END; |
代碼解析:
① 把異常名稱null_salary與異常碼-20101關(guān)聯(lián),該語句由于是預(yù)編譯語句,必須放在聲明部分。也就是說-20101的異常名稱就是null_salary。
② 嵌套PL/SQL語句塊
③ 在內(nèi)部PL/SQL語句塊中引發(fā)應(yīng)用系統(tǒng)異常-20101。
④ 在外部的PL/SQL語句塊中就可以用異常名null_salary進(jìn)行捕獲。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級(jí)講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
