oracle中的預定異常和自定義異常
阿新 • • 發佈:2018-11-11
預定異常
oracle中的預定異常情況大約有24個,對於這種異常情況的處理,無須再程式中定義,可用oracle自動引發,常見的預定異常如下
異常 | 說明 |
ACCESS_INTO_NULL | 在未初始化物件時出現 |
CASE_NOT_FOUND | CASE語句中的選項與使用者輸入的資料不匹配時出現 |
COLLECTION_IS_NULL | 給尚未初始化的表或陣列賦值時出現 |
CURSOR_ALREADY_OPEN | 在使用者試圖重新開啟已經開啟的遊標時出現。在重新開啟遊標前必須先將其關閉 |
DUP_VAL_ON_INDEX | 在使用者試圖將重複的值儲存在使用唯一索引的資料庫列中時出現 |
INVALID_CURSOR | 在執行非法遊標運算( 如開啟一個尚未開啟的遊標)時出現 |
INVALID_NUMBER | 在將字串轉換為數字時出現 |
LOGIN_DENTED | 在輸入的使用者名稱或密碼無效時出現 |
NO_ DATA_FOUND | 在表中不存在請求的行時出現。此外,當程式引用已經刪除的元素時,也會引發NO_ DATA FOUND異常 |
STORAGE_ERROR | 在記憶體損壞或PLSQL耗盡記憶體時出現 |
TOO_MANY_RowS | 在執行SELECT INTO語句後返回多行時出現 |
VALUE_ERROR | 在產生大小限制錯誤時出現,例如, 變數中的列值超出變數的大小 |
ZERO_ DIVIDE | 以零作為除數時出現 |
處理自定義異常
在程式執行過程中,出現程式設計人員認為的非正常情況,對於這種情況的處理,需要使用者在程式中定義,然後顯示的將其在程式中引發
對於這類異常情況的處理,步驟如下
在pl/sql塊的定義異常情況
<異常情況> exception;
丟擲異常情況
raise <異常情況>
預定異常
--異常 declare v_comm emp.comm%type; e_comm_is_null exception; --定義異常型別變數 begin select comm into v_comm from emp where empno=7788; if v_comm is null then raise e_comm_is_null; end if; exception when no_data_found then dbms_output.put_line('僱員不存在!錯誤為:'||SQLcode||SQLErrm); when e_comm_is_null then dbms_output.put_line('該僱員無補助'); end;
結果:
使用者自定義異常
--自定義異常 declare v_comm emp.comm%type; begin select comm into v_comm from emp where empno=7788; if v_comm is null then raise_application_error('-20010','該僱員無補助'); end if; end;
結果:
注意自定義異常的編號範圍是 -20999-20000之間的負整數,訊息長度最長為2048位元組