PLSQL宣告部分異常捕獲

yangtingkun發表於2012-09-18

近期在看PL/SQL的文件,發現了很多有趣的小知識點,有的以前知道,也有很多以前並不瞭解的,寫出來和大家分享一下。

這篇描述異常捕獲的作用範圍。

 

 

PL/SQL的異常捕獲只針對執行部分,在宣告部分產生的異常是無法捕獲的:

SQL> set serverout on size 100000
SQL> declare
2 v_num number;
3 begin
4 v_num := 'a';
5 exception
6 when others then
7 dbms_output.put_line('Exception captured!');
8 end;
9 /
Exception captured!

PL/SQL procedure successfully completed.

SQL> declare
2 v_num number := 'a';
3 begin
4 null;
5 exception
6 when others then
7 dbms_output.put_line('Exception captured!');
8 end;
9 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 2

想要解決宣告部分的異常捕獲,解決方法是在外面巢狀一層,在外層進行異常的捕獲:

SQL> begin
2 declare
3 v_num number := 'a';
4 begin
5 null;
6 exception
7 when others then
8 dbms_output.put_line('Exception captured!');
9 end;
10 exception
11 when others then
12 dbms_output.put_line('Outer exception captured!');
13 end;
14 /
Outer exception captured!

PL/SQL procedure successfully completed.

除了宣告部分,異常處理部分本身導致的異常同樣也是無法捕獲的,解決方法和宣告部分一樣,需要在外層進行捕獲。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-748430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章