1. 程式人生 > 資料庫 >Oracle 儲存過程5:PL/SQL異常處理

Oracle 儲存過程5:PL/SQL異常處理

PL/SQL異常處理是中對執行部分出現異常進行處理的部分。PL/SQL採用的是統一異常處理機制,當異常發生時,程式會自動跳轉到異常處理部分,交給異常處理程式進行異常匹配,再呼叫對應的處理方法。如果程式出現異常,而沒有找到對應的異常處理程式,則程式會直接中斷丟擲異常。PL/SQL異常可以分為預定義異常、非預定義異常、自定義異常三種。

PL/SQL異常處理都在PL/SQL塊的最下方,以EXCEPTION開始,其語句結構如下:

 

 

語法解析:

1、exception是異常處理部分開始的標誌。

2、when後面是跟著異常的名稱, then後面是對應異常處理程式。也就是當異常exception1出現時,執行的是異常1處理程式。其它異常程式不會進入。

3、when others then 指的是異常再前面異常捕獲中未捕獲到對應的異常處理程式,則全部進入其它異常處理程式進行異常處理。

預定義異常

預定義異常Oracle資料庫為我們預定義好開發過程當中經常出現的異常名稱。Oracle一共提供了25種預定義異常名稱,常用到的如我們使用select ...into語句進行賦值時,經常出現的NO_DATA_FOUND(select查詢時無資料不能賦值給變數錯誤)、TOO_MANY_ROWS(查詢返回記錄不止一條,觸發的錯誤)等。25種預定義異常,可以通過資料庫語句查詢,命令如下:

 

 結果如下:

 

 

案例1、測試預定義異常,程式碼如下:

 

 

非預定義異常

Oracle當中除了上面存在的25種預定義異常,更多存在的是非預定義的異常。也就是說,它們只存在錯誤編號和對應的錯誤資訊,但是沒有具體的錯誤名稱的對應。雖然,Oracle資料庫自己預定義了25種常見異常,但是對於其他異常,你可以選擇為異常新增一個名稱,使得它能夠被異常處理模組進行捕獲並丟擲處理。

定義非預定義異常,可以分為兩步走:

1、進行異常宣告:宣告一個異常名稱。

2、進行異常名稱和錯誤編號關聯。

Oracle處理非預定義的異常和預定義異常的原理是一致的,非預定義異常只是自己給對應的Oracle錯誤編號起個自己的名字,而預定義異常是Oracle資料自己起的名字。

 

案例2、演示非預定義異常的編寫,程式碼如下:

 

 

自定義異常

除了,上面的預定義異常外,Oracle還為開發者提供一個異常處理方式,那就是自定義異常,可以根據自己實際的業務需求和邏輯錯誤進行自定義異常,並通過邏輯控制主動丟擲自定義異常交給對應的異常處理模組,進行異常處理。進行自定義異常的步驟如下:

1、異常宣告定義:在PL/SQL塊的宣告部分採用關鍵字EXCEPTION定義異常名稱。

2、異常主動丟擲:在PL/SQL塊中執行部分,通過邏輯控制,主動使用RAISE關鍵字丟擲異常,交給異常處理模組處理。

 

案例3、自定義異常演示,程式碼如下: