




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第11章異常處理黑龍江大學(xué)計算機科學(xué)技術(shù)學(xué)院2異常處理異常概述異常處理過程異常的傳播311.1異常概述Oracle錯誤處理機制異常的類型4Oracle錯誤處理機制一個錯誤對應(yīng)一個異常,當(dāng)錯誤產(chǎn)生時拋出相應(yīng)的異常,并被異常處理器捕獲,程序控制權(quán)傳遞給異常處理器,由異常處理器來處理運行時錯誤。5預(yù)定義的Oracle異常非預(yù)定義的Oracle異常用戶定義的異常異常的類型6預(yù)定義的異常異常情況名錯誤代碼描述CURSOR_ALREADY_OPENORA-06511嘗試打開已經(jīng)打開的游標(biāo)
INVALID_CURSORORA-01001不合法的游標(biāo)操作(如要打開已經(jīng)關(guān)閉的游標(biāo))
NO_DATA_FOUNDORA-01403沒有發(fā)現(xiàn)數(shù)據(jù)
TOO_MANY_ROWSORA-01422一個SELECTINTO語句匹配多個數(shù)據(jù)行INVALID_NUMBERORA-01722轉(zhuǎn)換成數(shù)字失敗
(‘X’)
VALUE_ERRORORA-06502截斷、算法或轉(zhuǎn)換錯誤,通常出現(xiàn)在賦值錯誤
ZERO_DIVIDEORA-01476除數(shù)為0
ROWTYPE_MISMATCHORA-06504主機游標(biāo)變量與PL/SQL游標(biāo)變量類型不匹配7異常情況名錯誤代碼描述DUP_VAL_ON_INDEXORA-00001違反唯一性約束或主鍵約束SYS_INVALID_ROWIDORA-01410轉(zhuǎn)換成ROWID失敗TIMEOUT_ON_RESOURCEORA-00051在等待資源中出現(xiàn)超時LOGIN_DENIEDORA-01017無效用戶名/密碼CASE_NOT_FOUNDORA-06592沒有匹配的WHEN子句NOT_LOGGED_ONORA-01012沒有與數(shù)據(jù)庫建立連接STORAGE_ERRORORA-06500PL/SQL內(nèi)部錯誤PROGRAM_ERRORORA-06501PL/SQL內(nèi)部錯誤預(yù)定義的異常8異常情況名錯誤代碼描述ACCESS_INTO_NULLORA-06530給空對象屬性賦值COLLECTION_IS_NULLORA-06531對某NULLPL/SQL表或可變數(shù)組試圖應(yīng)用集合方法,而不是EXISTS
SELF_IS_NULLORA-30625調(diào)用空對象實例的方法SUBSCRIPT_BEYOND_COUNTORA-06533對嵌套表或數(shù)組索引引用時超出集合中元素的數(shù)量SUBSCRIPT_OUTSIDE_LIMITORA-06532對嵌套表或可變數(shù)組索引的引用超出聲明的范圍預(yù)定義的異常9非預(yù)定義異常在語句塊的聲明部分聲明一個異常名稱e_integrityEXCEPTION;通過PRAGMAEXCEPTION-INIT將異常與一個Oracle錯誤號相關(guān)聯(lián):
PRAGMAEXCEPTION-INIT(e_integrity.-2291)在異常處理部分捕捉并處理異常:WHENe_integrityTHEN...
10非預(yù)定義異常在語句塊的聲明部分聲明一個異常名稱e_integrityEXCEPTION;通過PRAGMAEXCEPTION-INIT將異常與一個Oracle錯誤號相關(guān)聯(lián):
PRAGMAEXCEPTION-INIT(e_integrity.-2291)在異常處理部分捕捉并處理異常:WHENe_integrityTHEN...
11用戶自定義的異常用戶自定義異常必須在聲明部分進行聲明。當(dāng)異常發(fā)生時,系統(tǒng)不能自動觸發(fā),需要用戶使用RAISE語句。在異常處理部分捕捉并處理異常。12異常處理過程在聲明部分為錯誤定義異常,包括非預(yù)定義異常和用戶定義異常。e_exceptionEXCEPTION;PRAGMAEXCEPTION_INIT(e_exceptioin,-#####);在執(zhí)行過程中當(dāng)錯誤產(chǎn)生時拋出與錯誤對應(yīng)的異常。RAISEuser_define_exception;在異常處理部分通過異常處理器捕獲異常,并進行異常處理。13異常的捕獲與處理異常處理器的基本形式為EXCEPTIONWHENexception1[ORexcetpion2…]THEN
sequence_of_statements1;WHENexceptioin3[ORexception4…]THENsequence_of_statements2;
……WHENOTHERSTHENsequence_of_statementsn;END;注意:一個異常處理器可以捕獲多個異常,只需要在WHEN子句中用OR連接即可;一個異常只能被一個異常處理器捕獲,并進行處理。14查詢名為SMITH的員工工資,如果該員工不存在,則輸出“Thereisnotsuchanemployee!”;如果存在多個同名的員工,則輸出其員工號和工資。DECLAREv_salemp.sal%type;BEGINSELECTsalINTOv_salFROMempWHEREename='SMITH';DBMS_OUTPUT.PUT_LINE(v_sal);EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('Thereisnotsuchanemplyee!');WHENTOO_MANY_ROWSTHENFORv_empIN(SELECT*FROMempWHEREename='SMITH')LOOPDBMS_OUTPUT.PUT_LINE(v_emp.empno||''||v_emp.sal);ENDLOOP;END;異常的處理實例15刪除dept表中部門號為10的部門信息,如果不能刪除則輸出“Therearesubrecordsinemptable!”。DECLAREe_deptno_fkEXCEPTION;
PRAGMAEXCEPTION_INIT(e_deptno_fk,-2292);BEGINDELETEFROMdeptWHEREdeptno=10;EXCEPTIONWHENe_deptno_fkTHENDBMS_OUTPUT.PUT_LINE('Therearesubrecordsinemptable!');END;異常的處理實例16修改7844員工的工資,保證修改后工資不超過6000DECLARE
e_highlimitEXCEPTION;v_salemp.sal%TYPE;BEGINUPDATEempSETsal=sal+100WHEREempno=7844RETURNINGsalINTOv_sal;IFv_sal>6000THENRAISEe_highlimit;ENDIF;EXCEPTIONWHENe_highlimitTHENDBMS_OUTPUT.PUT_LINE('Thesalaryistoolarge!');ROLLBACK;END;自定義異常的處理實例17OTHERS異常處理器OTHERS異常處理器是一個特殊的異常處理器,可以捕獲所有的異常。通常,OTHERS異常處理器總是作為異常處理部分的最后一個異常處理器,負責(zé)處理那些沒有被其他異常處理器捕獲的異常。18DECLAREv_salemp.sal%TYPE;e_highlimitEXCEPTION;BEGINSELECTsalINTOv_salFROMempWHEREename='JOAN';UPDATEempSETsal=sal+100WHEREempno=7900;IFv_sal>6000THENRAISEe_highlimit;ENDIF;EXCEPTIONWHENe_highlimitTHENDBMS_OUTPUT.PUT_LINE('Thesalaryistoolarge!');ROLLBACK;
WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE('Thereissomewronginselecting!');END;OTHERS異常處理器19錯誤相關(guān)信息的獲取可以通過兩個函數(shù)來獲取錯誤相關(guān)信息。SQLCODE:返回當(dāng)前錯誤代碼。如果是用戶定義錯誤返回值為1;如果是ORA-1403:NODATAFOUND錯誤,返回值為100;其他Oracle內(nèi)部錯誤返回相應(yīng)的錯誤號。SQLERRM(錯誤碼):返回當(dāng)前錯誤的消息文本。如果是Oracle內(nèi)部錯誤,返回系統(tǒng)內(nèi)部的錯誤描述;如果是用戶定義錯誤,則返回信息文本為“User-definedException”。20DECLAREv_salemp.sal%TYPE; e_highlimitEXCEPTION; v_codeNUMBER(6); v_textVARCHAR2(200);BEGIN SELECTsalINTOv_salFROMempWHEREename='JOAN'; UPDATEempSETsal=sal+100WHEREempno=7900; IFv_sal>6000THEN RAISEe_highlimit; ENDIF;EXCEPTION WHENe_highlimitTHEN DBMS_OUTPUT.PUT_LINE('Thesalaryistoolarge!'); ROLLBACK; WHENOTHERSTHEN v_code:=SQLCODE; v_text:=SQLERRM; DBMS_OUTPUT.PUT_LINE(v_code||''||v_text);END;錯誤相關(guān)信息的獲取21DECLARE v_textVARCHAR2(200);BEGINForain-1000..1loop v_text:=SQLERRM(a); DBMS_OUTPUT.PUT_LINE(v_code||''||v_text);Endloop;END;錯誤相關(guān)信息的獲取22異常的傳播可執(zhí)行部分異常的傳播如果當(dāng)前語句塊有該異常的處理器,則執(zhí)行之,并且成功完成該語句塊。然后,控制權(quán)傳遞到外層語句塊。
如果當(dāng)前語句塊沒有該異常的處理器,則通過在外層語句塊中產(chǎn)生該異常來傳播該異常。然后,執(zhí)行對外層語句塊執(zhí)行步驟1。如果沒有外層語句塊,則該異常將傳播到調(diào)用環(huán)境。
23異常的傳播DECLAREv_salemp.sal%TYPE;BEGINBEGINSELECTsalINTOv_salFROMempWHEREename='JOAN';EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('Thereisnotsuchanemployee!');END;
DBMS_OUTPUT.PUT_LINE('Nowthisisoutputtedbyouterblock!');END;/Thereisnotsuchanemployee!Nowthisisoutputtedbyouterblock!24DECLARE v_salemp.sal%TYPE;BEGIN BEGIN SELECTsalINTOv_salFROMempWHEREdeptno=10; EXCEPTION WHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('Thereisnotsuchanemployee!');END; DBMS_OUTPUT.PUT_LINE('Nowthisisoutputtedbyouterblock
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年柔性制造單元(FMC)合作協(xié)議書
- 2025年工商用制冷、空調(diào)設(shè)備合作協(xié)議書
- 跨界合作衍生分成補充協(xié)議(旅游)
- 電商店鋪裝修設(shè)計及品牌孵化合作協(xié)議
- 美容美發(fā)店品牌授權(quán)區(qū)域運營管理與支持合同
- 室內(nèi)軟裝設(shè)計與智能家居集成合同
- 國際商務(wù)文書銷毀車輛租賃全面服務(wù)合同
- 網(wǎng)絡(luò)直播內(nèi)容審核與平臺監(jiān)管責(zé)任合同
- 繼子女撫養(yǎng)權(quán)解除與監(jiān)護責(zé)任分配合同
- 忠誠協(xié)議效力層級及補充約定書(企業(yè)可持續(xù)發(fā)展)
- 2024年江蘇南通醋酸纖維有限公司招聘筆試真題
- 教學(xué)儀器設(shè)備購置申請報告 2 - 副本
- 2024年中國工程院戰(zhàn)略咨詢中心勞動人員招聘真題
- 2025福建漳州漳浦金瑞集團招聘20人筆試參考題庫附帶答案詳解
- 地下綜合管廊建設(shè)PPP項目施工組織設(shè)計
- 2025-2030中國風(fēng)光互補路燈行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025年無人機駕駛員職業(yè)技能考核無人機操作員客戶服務(wù)能力試題
- 2024婚姻家事法律服務(wù)業(yè)白皮書
- 臨時演員聘用合同
- 航空客運包機合同
- 馬拉松志愿者培訓(xùn)
評論
0/150
提交評論