1. 程式人生 > >oracle中的預定異常和自定義異常

oracle中的預定異常和自定義異常

預定異常

  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位元組