亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

ORACLE異常處理總結

2024-08-29 13:53:35
字體:
來源:轉載
供稿:網友
1:預定義異常       用于處理常見的Oracle錯誤

2:非預定義異常    用于處理預定義異常所不能處理的Oracle錯誤

3:自定義異常       用于處理于Oracle錯誤無關的其他情況

異常處理部分是以關鍵字EXCEPTION開始的,語法如下:

EXCEPTION

WHENexception_NameTHEN --exception_Name為異常的名字

   statement1;

WHENOTHERSTHEN

statement1;




異常處理部分從關鍵字EXCEPTION開始,在異常處理部分使用WHEN字句捕捉各種異常,如果有其他未預定義到的異常,使用WHENOTHERSTHEN字句進行捕捉和處理。

1、處理預定義異常,這是系統預定的21種類型

錯誤代碼是負整數,如-51
  

access_info_null(ora-06530)
當訪問沒有初始化的對象時觸發。

Case_not_found(ora-06592)
case過程中when后沒有包含必要的條件分支并且沒有else子句,則會觸發本異常。

Collection_is_null(06531)
訪問未初始化的集合元素(嵌套表或者varray)。

Cursor_already_open(ora-06511)
重新打開已經打開的游標。

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

Invalid_cursor(ora-01001)
試圖在不合法的游標上執行操作時,譬如沒打開游標就提取內容

Invalid_number(ora-01722)
當試圖將非法的字符串轉換為數字類型時。

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

Too_many_rows(ora-01422)
執行select into返回超過一行數據時。

Zero_divide(ora-01476)
0作為被除數時。

Subscript_beyond_count(ora-06533)
使用嵌套表或者varray集合時,如果引用下標超過last。

Subscript_outside_limit(ora-06532)
使用嵌套表或varray集合時,如果引用下標小于first。

Value_error(ora-06502)
在執行賦值操作時,如果變量長度不足以容納實際數據。

Login_denied(ora-01017)
連接數據庫時提供了不正確的用戶名或口令。

Not_logged_on(ora-01012)
在程序沒有連接到oracle數據庫時執行plsql代碼則會觸發。

PRogram_error(ora-06501)
plsql內部問題。

Rowtype_mismatch(ora-06504)
執行賦值操作時,如果宿主游標變量和PLSQL游標變量返回類型不兼容時。

Self_is_null(ora-30625)
使用對象類型時,如果在null實例上調用成員方法。

Storage_error(ora-06500)
超出內存空間或者內存被損壞。

Sys_invalid_rowid(ora-01410)
無效字符串企圖轉換為rowid類型時。

Timeout_on_resource(ora-00051)
等待資源時出現超時錯誤。




2、處理非預定義異常

使用非預定義異常包括三步:

一:在定義部分定義異常名,

二:在異常和Oracle錯誤之間建立關聯,

三:在異常處理部分捕捉并處理異常。



當定義Oracle錯誤和異常之間的關聯關系時,需要使用偽過程EXCEPTION_INIT。



一:首先的定義部分定義異常;

二:使用progma exception_init(exception_name,exception_number)在異常和oracle錯誤之間建立關聯,

   這時要求用戶知道可能出現的錯誤號(異常函數sqlcode、sqlerrm和raise_application_error);

三:最終在異常處理部分捕捉并處理異常。





下面以更新特定雇員的部門號,并處理ORA-02291錯誤為例,說明使用非預定義異常的方法。示例如下:



DECLARE

e_integrity EXCEPTION;--1、定義部分

PRAGMA EXCEPTION_INIT(e_integrity,-2291); --2、建立關聯關系

BEGIN

UPDATEempSETdeptno=&dnoWHEREempno=&eno;

EXCEPTION

WHENe_integrityTHEN --3、捕捉處理

   DBMS_OUTPUT.PUT_LINE(‘該部門不存在’);

END;




--3、處理自定義異常

預定義異常和非預定義異常都與Oracle錯誤有關,并且當出現Oracle錯誤時會隱含觸發相應異常;

而自定義異常與Oracle錯誤沒有任何關聯,它是由開發人員為特定情況所定義的異常。



當使用自定義異常時,

一:需要在定義部分(DECLARE)定義異常,

二:再執行部分(BEGIN)觸發異常(使用RAISE語句),

三:在異常處理部分(EXCEPTION)捕捉并處理異常。



declare

myexceptionexception;

begin

if 1=0 then

   raisemyexception;

endif;

exception

when myexception then

    dbms_output.put_line('asdf');

end;


注意:不能在同一個block中描述EXCEPTION兩次,但是可以描述一個exception在兩個不同的block中。異常(exception)是有作用域的,子塊的異常不能被當前塊所捕捉,





--4、使用異常函數:

Oracle內置函數sqlcode和sqlerrm主要用在others處理器中,分別用來返回oracle的錯誤代碼和錯誤消息。

一般情況下sqlcode返回負數標識的oracle錯誤代碼,除非錯誤為‘ora-01403:no data found’,此時對應的sqlcode為+100,

對于用戶自定義的異常,sqlcode返回+1,如果沒有異常被觸發,sqlcode返回0。

Begin

Exception

Whenothersthen

   Dbms_output.put_line(sqlcode||sqlerrm(sqlcode));

End;






Oracle過程raise_application_error用于在plsql應用程序中自定義錯誤消息。

注意該過程只能在數據庫端的子程序(過程、函數、包、觸發器)中使用,而不能在匿名塊和客戶端的子程序中使用。

語法為raise_application_error(error_number,message[,[true|false]]);

其中

error_number用于定義錯誤號,該錯誤號必須在-20000到-20999之間的負整數;

message用于指定錯誤消息,并且該消息的長度不能超過2048字節;

第三個參數如果為true,則該錯誤會被放在先前錯誤堆棧中,如果為false(默認值)則會替代先前所有錯誤。

IFproduct_not_foundTHEN

           RAISE_APPLICATION_ERROR(-20123,'Invald product code'TRUE);

ENDIF;






--5、plsql編譯警告:

plsql警告可以分為四類:

severe:用于檢查可能出現的不可預料或者錯誤結果,例如參數的別名問題;

performance:用于檢查可能引起的性能問題,例如執行insert操作時為number列提供了varchar2類型數據;

informational:用于檢查子程序中的死代碼;

all:用于檢查所有警告。



為了數據庫可以在編譯plsql子程序時發出警告信息,需要設置初始化參數plsql_warnings。這個參數不僅可以在系統級或者會話級設置,也可以在alter procedure命令中設置。

Alter{system|session|procedure}

setplsql_warnings=

  ’{enable|disable:{all|performance|severe|informational}}’;




為了檢查是否存在對應警告信息,必須先激活警告檢查,然后重新編譯子程序,最后使用show errors命令顯示警告錯誤。

createorreplaceproceduremy_test

is

begin

if1=0then

   dbms_output.put_line('test');

endif;

end;

SQL>alterproceduremy_test compile plsql_warnings='enable:all';



Procedurealtered

SQL>show errors;

ErrorsforPROCEDURESYS.MY_TEST:

LINE/COL ERROR

-------- -------------------------

10/5    PLW-06002:無法執行的代碼


  

--6、定義Exception時要注意的一些事項

當異常發生時,在塊的內部沒有該異常處理器時,控制將轉到或傳播到上一層塊的異常處理部分。

沒有處理的異常將沿檢測異常調用程序傳播到外層,當異常被處理并解決或到達程序最外層傳播停止。在聲明部分拋出的異常將控制轉到上一層的異常部分。



用戶必須在獨立的WHEN子串中為每個異常設計異常處理代碼,WHEN OTHERS子串必須放置在最后面作為缺省處理器處理沒有顯式處理的異常。當異常發生時,控制轉到異常部分,ORACLE查找當前異常相應的WHEN..THEN語句,捕捉異常,THEN之后的代碼被執行,如果錯誤陷阱代碼只是退出相應的嵌套塊,那么程序將繼續執行內部塊END后面的語句。如果沒有找到相應的異常陷阱,那么將執行WHEN OTHERS。在異常部分WHEN子串沒有數量限制。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产成人| 中日韩午夜理伦电影免费| 97激碰免费视频| 91在线精品播放| 欧美精品第一页在线播放| 国产成人精品综合久久久| 欧美日韩免费看| 国产精品视频久久久| 久久久欧美精品| 国产精品久久久久77777| 久久久国产一区二区三区| 欧美丝袜美女中出在线| 欧美激情高清视频| 亚洲伊人久久综合| 97精品国产97久久久久久| 欧美丰满片xxx777| 欧美成年人视频网站欧美| 久久99精品久久久久久噜噜| 欧美一区视频在线| 一本色道久久综合狠狠躁篇怎么玩| 成人性生交xxxxx网站| 欧美伊久线香蕉线新在线| 久久综合亚洲社区| 韩曰欧美视频免费观看| 欧美黄色片在线观看| 亚洲国产小视频在线观看| 欧洲日韩成人av| 亚洲美女又黄又爽在线观看| 日韩大陆欧美高清视频区| 人体精品一二三区| 欧美日本啪啪无遮挡网站| 中文字幕日韩高清| 黑人巨大精品欧美一区二区免费| 日本在线观看天堂男亚洲| 欧美性受xxxx黑人猛交| 日韩精品免费电影| 欧美黄色免费网站| 青青草一区二区| 久久综合色88| 国产精品都在这里| 精品亚洲男同gayvideo网站| 亚洲第一精品夜夜躁人人爽| 中国china体内裑精亚洲片| www亚洲精品| 亚洲无亚洲人成网站77777| 日产精品久久久一区二区福利| 97视频在线播放| 色先锋久久影院av| 中文字幕亚洲一区二区三区五十路| 欧美日韩国产一区中文午夜| www日韩中文字幕在线看| 国产精品一区二区女厕厕| 成人黄色在线播放| 亚洲电影免费观看高清完整版在线观看| 亚洲综合最新在线| 精品国产乱码久久久久久天美| 亚洲美女av在线播放| 日韩中文字幕精品| 国产一区二区成人| 国产精品第一第二| 国产日产久久高清欧美一区| 亚洲欧美日韩国产中文| 日本高清久久天堂| 国产精品亚洲激情| 国产啪精品视频| 国产精品专区h在线观看| 亚洲欧美日韩精品久久| 久久成人精品一区二区三区| 欧洲亚洲在线视频| 欧美激情videoshd| 欧洲成人午夜免费大片| 91av视频在线观看| 亚洲福利视频二区| 欧美午夜精品久久久久久浪潮| 欧美电影第一页| 欧美一区二区三区……| 国产免费一区二区三区香蕉精| 色偷偷亚洲男人天堂| 亚洲视频在线观看| 亚洲美腿欧美激情另类| 色悠悠久久久久| 久久精品国产久精国产一老狼| 久久精品久久久久电影| 日本中文字幕不卡免费| www.欧美精品| 国产欧美最新羞羞视频在线观看| 国产精品一久久香蕉国产线看观看| 欧美成年人在线观看| 国产视频久久久久久久| 久久五月天综合| 中文字幕亚洲一区二区三区| 国产91精品黑色丝袜高跟鞋| 91精品在线国产| 夜夜嗨av一区二区三区四区| 欧美在线精品免播放器视频| 91精品美女在线| 国产mv免费观看入口亚洲| 日韩国产一区三区| 色哟哟网站入口亚洲精品| 国产精品黄色影片导航在线观看| 97久久超碰福利国产精品…| 国产精品小说在线| 欧美成人免费大片| 黄色成人在线播放| 福利视频第一区| 91网站在线看| 久久精品国产亚洲精品2020| 欧美美女操人视频| 欧美另类在线观看| 性欧美视频videos6一9| 国产精品视频网址| 亚洲欧美日韩国产中文| 国产免费一区二区三区在线观看| 亚洲男人天堂网| 中文字幕日韩av电影| 欧美在线视频在线播放完整版免费观看| 91精品一区二区| 色黄久久久久久| 欧美激情视频三区| 亚洲欧美精品一区二区| 91免费视频网站| 久久影院资源网| 亚洲激情 国产| 成人激情电影一区二区| 国产精品视频区1| 国产精品久久久久久av福利软件| 色噜噜久久综合伊人一本| 亚洲一区第一页| 亚洲精品av在线播放| 大伊人狠狠躁夜夜躁av一区| 久久在精品线影院精品国产| 蜜臀久久99精品久久久无需会员| 色老头一区二区三区在线观看| 国产成人综合精品| 中文字幕欧美视频在线| 国产精品一区二区三区久久| 国产成人avxxxxx在线看| 欧美黑人狂野猛交老妇| 亚洲日本aⅴ片在线观看香蕉| 日韩电影中文字幕在线观看| 91国产精品91| 国产精品草莓在线免费观看| 国产精品观看在线亚洲人成网| 伊是香蕉大人久久| 亚洲xxx视频| 久久99国产综合精品女同| 亚洲国产成人久久综合| 97色在线视频观看| 91色琪琪电影亚洲精品久久| 国产精品久久久999| 欧美亚洲另类制服自拍| 久久久免费高清电视剧观看| 亚洲电影免费观看高清| 欧美成人午夜视频| 日韩精品在线免费播放| 欧美在线观看视频| 精品国产31久久久久久| 91视频国产精品| 91香蕉嫩草影院入口| 欧美乱妇高清无乱码| 国产亚洲一区二区精品| 国产精品美乳在线观看| 亚洲国产精品电影| xvideos亚洲|