語句執行過程中,可能會因為異常造成損失,甚至是系統崩潰。為了避免這種情況的發生,必須對異 常進行處理。PL/SQL提供了對異常進行處理的方法。該方法會使得在PL/SQL代碼部分執行的過程中無論 何時發生了異常錯誤,都會自動轉向執行異常處理部分。
1、預定義異常
預定義異常是由系統產生的。比如在出現0為除數的時候,系統會產生一個預定義的ZERO_DIVIDE異常 。樣本如下:
declare num1 number := 2; num2 number := 0; num3 number; begin num3 := num1/num2; --當執行這句的時候,系統捕捉到異常會自動轉到異常處理部分,最後輸出“不能除0”。 exception when zero_divide then dbms_output.put_line('不能除0'); when too_many_rows then dbms_output.put_line('too many rows'); end;
如果在當前塊中沒有處理異常的代碼,並且begin/end塊是嵌套的,程式將繼續在外部塊中尋找處理 異常的代碼塊,直到找到一個。如果最終沒有處理異常的代碼塊存在,程式將結束。當對異常進行了處 理後,程式將繼續執行異常代碼塊之後的代碼。
2、自訂異常
使用者如果需要自訂異常的話,可以先定義一個exception變數,然後使用raise語句來拋出一個異常 ,然後在捕捉異常的時候捕捉對應的拋出異常。範例程式碼如下:
declare selfDefineException exception; /*定義異常變數*/ num1 number := 2; num2 number := 3; num3 number; begin num3 := num1 + num2; if num3=5 then raise selfDefineException; /*拋出自訂的異常*/ end if; exception when selfDefineException then /*捕獲自訂的異常*/ dbms_output.put_line("selfDefineException"); when zero_divide then dbms_output.put_line("不能除0"); end;
3、使用others異常
對於那些沒有直接捕捉的異常,都可以使用others異常進行捕捉,others異常可以單獨使用,但當與 其他異常處理一起使用的時候必須放在所有情況的最末尾。範例程式碼如下:
declare num1 number := 2; num2 number := 0; num3 number; begin num3 := num1/num2; --當執行這句的時候,系統捕捉到異常會自動轉到異常處理部分,最後輸出“不能除0”。 exception when others then /*這裡直接捕捉others異常*/ dbms_output.put_line('不能除0'); end;
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/