天天看點

Oracle 自定義異常

自定義異常總結兩種常用用法

1、定義ora-id,就相當于系統的報錯一樣

declare
  -- 自定義異常名稱
  NO_CONFIG_EXCEPTION exception;
  v_sqlcode varchar2(20);  -- 錯誤碼
  v_sqlerrm varchar2(300); -- 錯誤資訊
  -- 告訴編譯器将異常名 與 ORACLE 錯誤碼結合起來
  pragma exception_init(NO_CONFIG_EXCEPTION, -20001);
begin
  raise_application_error(-20001, 'Hello Exception Message');
exception
  when NO_CONFIG_EXCEPTION then
    v_sqlcode := sqlcode;
    v_sqlerrm := sqlerrm;
    dbms_output.put_line(v_sqlcode);
    dbms_output.put_line(v_sqlerrm);
end;
           

不過這種我覺得不常見,畢竟已經放在存過中了,一般抛出記錄到日志中

2、在異常處捕獲異常并抛出,這樣在擷取異常的時候就能辨識錯誤,将錯誤記錄到日志中,友善快速鎖定錯誤

/*自定義異常:如果你想在某個特定時間發生時間向應用程式的使用者發出一些警告資訊。
而事件本身不會抛出Oracle内部異常,這個異常是屬于應用程式的特定異常,那麼就需要自定義異常
使用者定義的異常錯誤是通過顯式使用raise語句來觸發,當引發一個異常錯誤時,控制就轉向到exception塊
異常錯誤部分,執行錯誤處理代碼
步驟:
  1.在聲明部分定義異常  <異常情況> exception;
  2.raise <異常情況>
  3.異常情況處理部分對異常情況作出相應的處理
*/
declare
  v_empno emp.empno%type:=&empno;
  ex_result exception;
begin
  update emp set sal = sal + 100 where empno = v_empno;
  if sql%notfound then
    raise ex_result;
  else
    commit;
  end if;
  exception
    when ex_result then
      dbms_output.put_line('資料更新失敗!');
      rollback;
    when others then
      dbms_output.put_line('其他異常!');
end;