Oracle異常處理

    異常在代碼中的聲明部分聲明,在執行部分引發,在異常處理部分處理。一般異常分爲兩中:預定義異常和用戶自定義異常。

    下面通過代碼分別介紹異常的聲明、執行、處理。

1、用戶自定義異常

(a)異常聲明

  1. DECLARE 
  2.   -- Exception to indicate an error condition 
  3.   e_DuplicateAuthors EXCEPTION; 

同時在DECLARE部分聲明其他三個變量,供下面函數使用

  1. v_Author1 books.author1%TYPE; 
  2. v_Author2 books.author2%TYPE; 
  3. v_Author3 books.author3%TYPE; 

(b)異常引發,用戶自定義異常是通過RAISE語句顯示引發,而預定義異常則是在與它們關聯的Oracle錯誤發生時候隱式引發的。異常引發代碼如下:

  1. BEGIN 
  2.   /* Find the IDs for the 3 authors of 'Oracle9i DBA 101' */ 
  3.   SELECT author1, author2, author3 
  4.     INTO v_Author1, v_Author2, v_Author3 
  5.     FROM books 
  6.     WHERE title = 'Oracle9i DBA 101'
  7.    
  8.   /* Ensure that there are no duplicates */ 
  9.   IF (v_Author1 = v_Author2) OR (v_Author1 = v_Author3) OR 
  10.      (v_Author2 = v_Author3) THEN 
  11.      RAISE e_DuplicateAuthors; 
  12. END IF; 

(c)異常處理

  1.  EXCEPTION 
  2.   WHEN e_DuplicateAuthors THEN 
  3.     INSERT INTO log_table (info) 
  4.       VALUES ('Oracle9i DBA 101 has duplicate authors'); 
  5. end; 

2、預定義異常

預定義異常列表

Oracle錯誤編號 等價異常名稱 說明
ORA-0001 Dup_val_on_index 違反了唯一性限制
ORA-0051 Timeout-on-resource 在等待資源時發生超時
ORA-0061 Transaction-backed-out 由於發生死鎖事務被撤消
ORA-1001 Invalid-CURSOR 試圖使用一個無效的遊標
ORA-1012 Not-logged-on 沒有連接到ORACLE
ORA-1017 Login-denied 無效的用戶名/口令

ORA-1403

 
No_data_found SELECT INTO沒有找到數據
ORA-1422 Too_many_rows SELECT INTO 返回多行
ORA-1476 Zero-divide 試圖被零除
ORA-1722 Invalid-NUMBER 轉換一個數字失敗
ORA-6500 Storage-error 內存不夠引發的內部錯誤
ORA-6501 Program-error 內部錯誤
ORA-6502 Value-error 轉換或截斷錯誤
ORA-6504 Rowtype-mismatch 宿主遊標變量與 PL/SQL變量有不兼容行類型
ORA-6511

CURSOR-already-OPEN

 
試圖打開一個已處於打開狀態的遊標
ORA-6530 Access-INTO-null 試圖爲null 對象的屬性賦值
ORA-6531 Collection-is-null 試圖將Exists 以外的集合( collection)方法應用於一個null pl/sql 表上或varray
ORA-6532 Subscript-outside-limit 對嵌套或varray索引得引用超出聲明範圍以外
ORA-6533 Subscript-beyond-count 對嵌套或varray 索引得引用大於集合中元素的個數
     

 

(a)異常聲明

    由於預定義異常是在與它們關聯的Oralce錯誤發生的時候隱式引發的,所以不需要異常聲明。

(b)異常引發

    下面這段程序是向authors表中插入主鍵重複的記錄。因此當第二條INSERT試圖插入的時候,就會引發了這個錯誤:

     ORA-0001:unique constraint(<constraint name>) violated

     該錯誤對應的異常就是DUP_VAL_ON_INDEX異常。

  1. BEGIN 
  2.   INSERT INTO authors (id, first_name, last_name) 
  3.     VALUES (20000, 'John', 'Smith'); 
  4.   INSERT INTO authors (id, first_name, last_name) 
  5.     VALUES (20000, 'Susan', 'Ryan'); 
  6. END;  

(c)異常處理

     異常引發後,將不會執行下面這條語句,直接跳出異常。

  1. INSERT INTO authors (id, first_name, last_name)  
  2. VALUES (20000, 'Susan', 'Ryan'); 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章