Oracle預定義的21個系統異常類型


 

 
 
Oracle預定義的21個系統異常類型

命名的系統異常

產生原因

ACCESS_INTO_NULL

未定義對象

CASE_NOT_FOUND

CASE 中若未包含相應的 WHEN ,並且沒有設置 ELSE 時

COLLECTION_IS_NULL

集合元素未初始化

CURSER_ALREADY_OPEN

游標已經打開

DUP_VAL_ON_INDEX

唯一索引對應的列上有重復的值

INVALID_CURSOR

在不合法的游標上進行操作

INVALID_NUMBER

內嵌的 SQL 語句不能將字符轉換為數字

NO_DATA_FOUND

使用 select into 未返回行,或應用索引表未初始化的元素時

TOO_MANY_ROWS

執行 select into 時,結果集超過一行

ZERO_DIVIDE

除數為 0

SUBSCRIPT_BEYOND_COUNT

元素下標超過嵌套表或 VARRAY 的最大值

SUBSCRIPT_OUTSIDE_LIMIT

使用嵌套表或 VARRAY 時,將下標指定為負數

VALUE_ERROR

賦值時,變量長度不足以容納實際數據

LOGIN_DENIED

PL/SQL 應用程序連接到 oracle 數據庫時,提供了不正確的用戶名或密碼

NOT_LOGGED_ON

PL/SQL 應用程序在沒有連接 oralce 數據庫的情況下訪問數據

PROGRAM_ERROR

PL/SQL 內部問題,可能需要重裝數據字典& pl./SQL 系統包

ROWTYPE_MISMATCH

宿主游標變量與 PL/SQL 游標變量的返回類型不兼容

SELF_IS_NULL

使用對象類型時,在 null 對象上調用對象方法

STORAGE_ERROR

運行 PL/SQL 時,超出內存空間

SYS_INVALID_ID

無效的 ROWID 字符串

TIMEOUT_ON_RESOURCE

Oracle 在等待資源時超時

 下面的異常帶有錯誤代碼: 

Oracle在預定義包STANDARD包中提供了一系列的預定義異常。他們是調試Oracle PL/SQL程序的有用工具。大部分錯誤用負號作為錯誤號。可以使用SQLCODE內置函數看到錯誤代碼,使用SQLERRM得到異常的內置消息。

異常
錯誤
何時出現
ACCESS_INTO_NULL ORA-06530 試圖訪問未初始化對象的時候出現
CASE_NOT_FOUND ORA-06592 如果定義了一個沒有ELSE子句的CASE語句,而且沒有CASE語句滿足運行時條件時出現該異常
COLLECTION_IS_NULL ORA-06531 當程序去訪問一個沒有進行初始化的NESTED TABLE或者是VARRAY的時候,會出現該異常
CURSOR_ALREADY_OPEN ORA-06511 游標已經被OPEN,如果再次嘗試打開該游標的時候,會出現該異常
DUP_VAL_ON_INDEX ORA-00001 如果插入一列被唯一索引約束的重復值的時候,就會引發該異常(該值被INDEX認定為沖突的)
INVALID_CURSOR ORA-01001 不允許的游標操作,比如關閉一個已經被關閉的游標,就會引發
INVALID_NUMBER ORA-01722 給數字值賦非數字值的時候,該異常就會發生,這個異常也會發生在批讀取時候LIMIT子句返回非正數的時候
LOGIN_DENIED ORA-01017 程序中,使用錯誤的用戶名和密碼登錄的時候,就會拋出這個異常
NO_DATA_FOUND ORA_06548 在使用SELECT INTO 結構,並且語句返回NULL值的時候;訪問嵌套表中已經刪除的表或者是訪問INDEX BY表(聯合數組)中的未初始化元素就會出現該異常
NOT_LOGGED_ON ORA-01012 當程序發出數據庫調用,但是沒有連接的時候(通常,在實際與會話斷開連接之后)
PROGRAM_ERROR ORA-06501 當Oracle還未正式捕獲的錯誤發生時常會發生,這是因為數據庫大量的Object功能而發生
ROWTYPE_MISMATCH ORA-06504 如果游標結構不適合PL/SQL游標變量或者是實際的游標參數不同於游標形參的時候發生該異常
SELF_IS_NULL ORA-30625 調用一個對象類型非靜態成員方法(其中沒有初始化對象類型實例)的時候發生該異常
STORAGE_ERROR ORA-06500 當內存不夠分配SGA的足夠配額或者是被破壞的時候,引發該異常
SUBSCRIPT_BEYOND_COUNT ORA-06533 當分配給NESTED TABLE或者VARRAY的空間小於使用的下標的時候,發生該異常(類似於java的ArrayIndexOutOfBoundsException)
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 使用非法的索引值來訪問NESTED TABLE或者VARRAY的時候引發
SYS_INVALID_ROWID ORA-01410 將無效的字符串轉化為ROWID的時候引發
TIMEOUT_ON_RESOURCE ORA-00051 當數據庫不能安全鎖定資源的時候引發
TOO_MANY_ROWS ORA-01422 常見錯誤,在使用SELECT INTO 並且查詢返回多個行時引發。如果子查詢返回多行,而比較運算符為相等的時候也會引發該異常。
USERENV_COMMITSCN_ERROR ORA-01725 只可使用函數USERENV('COMMITSCN')作為INSERT語句的VALUES子句中的頂級表達式或者作為UPDATE語句的SET子句中的右操作數
VALUE_ERROR ORA-06502 將一個變量賦給另一個不能容納該變量的變量時引發
ZERO_DIVIDE ORA-01476 將某個數字除以0的時候,會發生該異常

可以很方便的在SQL塊中使用EXCEPTION來捕捉異常並且進行處理(當然,編譯異常與在聲明塊中被拋出的異常除外,一個好的PL/SQL編程習慣是規避在聲明塊中進行變量的賦值操作)。如果上面的預定義異常能夠滿足要求,就可以使用他們。如果不滿足,則可以像JAVA程序一樣,定義自己的異常,並且可以使用RAISE EXCEPTION來拋出異常。

 

參考:

http://www.233.com/oracle/zonghe/20100803/090956831.html

http://www.linuxidc.com/Linux/2012-10/72544.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM