Oracle Exception

Oracle存儲過程的異常處理

一、爲了提升存儲過程的健壯性,避免運行錯誤,當創建存儲過程時應包含異常處理部分。
二、異常(EXCEPTION)是一種PL/SQL標識符,包括預約義異常、非預約義異常和自定義異常;
三、預約義異常是指由PL/SQL提供的系統異常;非預約義異經常使用於處理與預約義異常無關的Oracle錯誤(如完整性約束等);自定義異經常使用於處理與Oracle錯誤的其餘異常狀況。
四、RAISE_APPLICATION_ERROR用於自定義錯誤消息,而且消息號必須在-20000~-20999之間
                 html

命名的系統異常     產生緣由 
access_into_null    未定義對象 
case_not_found     case中若未包含相應的when,而且沒有設置 
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 在等待資源時超時sql

       

           

複製代碼
--自定義異常處理
CREATE OR REPLACE PROCEDURE stu_proc
(
--多個用逗號隔開
v_id IN NUMBER
) IS
--多個用分號隔開
v_max_id NUMBER;
v_name VARCHAR2(20);
v_raise EXCEPTION;
BEGIN
SELECT MAX(a.id) INTO v_max_id FROM student a;
IF v_id>v_max_id THEN
RAISE v_raise;
END IF;
SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id;
dbms_output.put_line('學生名稱爲:'||v_name);
EXCEPTION
WHEN v_raise THEN
RAISE_APPLICATION_ERROR(-20010, 'v_id not exists!');
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20011, 'ERROR:不存在!');
END stu_proc;
複製代碼
相關文章
相關標籤/搜索