熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle異常分類小記

2013-11-13 16:20:40  來源: Oracle 

  前幾天看《Oracle PL/SQL Programming》的異常處理部分粗粗看了一遍覺得有點亂根據自己的理解作了一下分類並相應給了一些簡例不一定很准確供參考

  

  Oracle 異常

  具名Oracle異常

  Oracle為此類異常預先指定了異常號異常信息異常名稱

  匿名Oracle異常

  Oracle為此類異常預先指定了異常號異常信息但未指定異常名稱

  自定義異常

  普通自定義異常

  Oracle無關的業務邏輯異常無異常號異常信息異常名稱需要手工聲明

  應用程序異常Raise_Application_Error

  Oracle無關的業務邏輯異常此方法拋出的異常可以自定義異常號及異常信息可以通過Exception_Init綁定到手工聲明的異常名稱上

  )Oracle異常

  Oracle異常總是由Oracle檢測並自動拋出的

  )具名Oracle異常

  Oracle定義了個具名的Oracle異常比如

  Dup_val_on_index(ora)當中唯一索引所對應的列上鍵入重復值時

  No_data_found(ora)執行select into未返回行或者引用了索引表未初始化的元素時

  流程

  A)在Exception模塊按異常名進行處理

  示例

  DECLARE

  num number;

  BEGIN

  num:=/;

  EXCEPTION

  when ZERO_DIVIDE then

  dbms_outputput_line(SQLERRM);

  END;

  /

  ORA: divisor is equal to zero

  PL/SQL procedure successfully completed

  )匿名Oracle異常

  Oracle中存在大量匿名的異常比如

  ORA: parent key not found

  由於PL/SQL的異常處理模塊只接受異常名稱不接受異常號(除了WHEN OTHERS語句它可以捕獲任意異常不論你是否具有異常名稱)為便於處理需要手工為其指定異常名稱

  流程

  A)聲明異常

  B)將此異常綁定到Oracle異常號上

  C)在Exception模塊按異常名進行處理

  示例

  DECLARE

  ex EXCEPTION;

  PRAGMA EXCEPTION_INIT(ex);

  BEGIN

  insert into t values();

  EXCEPTION

  when ex then

  dbms_outputput_line(SQLERRM);

  END;

  /

  ORA: integrity constraint (ADMINFK) violated parent key not found

  PL/SQL procedure successfully completed

  )自定義異常

  自定義異常總是開發者顯式拋出來的

  )普通自定義異常

  流程

  A)聲明異常

  B)使用Raise語句拋出異常

  C)在Exception模塊按異常名進行處理

  示例

  DECLARE

  ex EXCEPTION;

  BEGIN

  RAISE ex;

  EXCEPTION

  when ex then

  dbms_outputput_line(SQLERRM);

  dbms_outputput_line(i raised a userdefined exception ex);

  END;

  /

  UserDefined Exception

  i raised a userdefined exception ex

  )應用程序異常Raise_Application_Error(Num Msg)

  普通自定義異常既沒有異常號(SQLCODE一律為也不能指定異常信息(SQLERRM一律為UserDefined Exception如果想要為自定義異常指定異常號與異常信息需要借助Raise_Application_Error(Num Msg)函數這裡的Num即異常號范圍是[]Msg則是異常信息

  對於此類異常由於Num是自定義的因此應該有相應的管理辦法以避免重復使用異常號比如可以將已使用的異常號保存在一張數據庫中表以便將來檢查

  流程

  A)聲明異常

  B)將此異常綁定到自定義的異常號上

  C)使用Raise_Application_Error(Num Msg)拋出異常同時指定了異常號及異常信息

  D)在Exception模塊按異常名進行處理

  示例

  CREATE OR REPLACE PROCEDURE mtest

  is

  ex EXCEPTION;

  PRAGMA EXCEPTION_INIT(ex );

  BEGIN

  Raise_Application_Error(raising my exception);

  EXCEPTION

  when ex then

  dbms_outputput_line(SQLERRM);

  END;

  /

  Procedure created

  SQL> exec mtest

  ORA: raising my exception

  PL/SQL procedure successfully completed


From:http://tw.wingwit.com/Article/program/Oracle/201311/18175.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.