PLSQL中異常的定義、拋出、處理_第1頁
PLSQL中異常的定義、拋出、處理_第2頁
PLSQL中異常的定義、拋出、處理_第3頁
PLSQL中異常的定義、拋出、處理_第4頁
PLSQL中異常的定義、拋出、處理_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、摘要在PLSQL程序開發(fā)過程中,很重要的部分就是對程序異常的監(jiān)控和處理,包括如何觸發(fā)異常,何時進行處理,如何進行處理,是否將程式中的所有異常集中在一起,通過公共異常處理的procedure或function,如果沒有完善的程式處理機制,很難說該程式是一只健壯的程式,當程式遇到很多類型或者量很多資料時,系統(tǒng)若沒有異常處理必然會導(dǎo)致程式的出錯當預(yù)判到了某些異常,需要對預(yù)判到的異常進行合適相應(yīng)的處理,是否拋出異常還是忽略還是其他當然程式?jīng)]有預(yù)判到或者是一些未知的異常遇到,所以異常處理模塊也要考慮這些未預(yù)見到的程式PLSQL異常的資料網(wǎng)絡(luò)流傳很多,都有些類似,歸納的很詳細了,資料被轉(zhuǎn)來轉(zhuǎn)去,也不太

2、清楚原文的出處,向未知的大神致敬本文整理下網(wǎng)絡(luò)上的資料,并重新排版了下· 異常的分類· 系統(tǒng)自帶異常· 用戶自定異常· 異常的拋出· PLSQL引擎自動處理· Raise· Raise_Application_Error· 異常的處理· 用戶自定異常處理· 系統(tǒng)自帶異常處理· 未知異常處理· 在聲明階段中異常· 異常的傳播異常的SQLCode 和 SQL Errm· 異常在聲明塊中傳播· 異常在執(zhí)行塊中傳播· Oracle ERP Fn

3、d_file工具 · fnd_file.output· fnd_file.log· 附件· 附件 - Oracle自帶異常列表· 附件 - Oracle Standard Error 列表二、概述1. 異常的分類1.1 系統(tǒng)自帶異常1.1.1 概念 : 執(zhí)行期間返回到PL/SQL塊的ORACLE錯誤或由PL/SQL代碼的某操作引起的錯誤,如除數(shù)為零或內(nèi)存溢出的情況             

4、;      每當PL/SQL違背了ORACLE原則或超越了系統(tǒng)依賴的原則就會隱式的產(chǎn)生內(nèi)部異常。                   因為每個ORACLE錯誤都有一個號碼并且在PL/SQL中異常通過名字處理,ORACLE提供了預(yù)定義的內(nèi)部異常1.1.2 例子: 未定義異常,系統(tǒng)遇到預(yù)定義異常時,自動拋出,如no_data_found   

5、0;    1.2 用戶定義異常 1.2.1 概念: 由開發(fā)者顯示定義,在PL/SQL塊中傳遞信息以控制對于應(yīng)用的錯誤處理                        如果要處理未命名的內(nèi)部異常,必須使用OTHERS異常處理器或PRAGMA EXCEPTION_INIT 。   

6、0;                      PRAGMA由編譯器控制,或者是對于編譯器的注釋。PRAGMA在編譯時處理,而不是在運行時處理。                    

7、60;     EXCEPTION_INIT告訴編譯器將異常名 與ORACLE錯誤碼結(jié)合起來,這樣可以通過名字引用任意的內(nèi)部異常,并且可以通過名字為異常編寫一適當?shù)漠惓L幚砥鳌?.1.2 例子: 自定義一個異常bxj_exception,并拋出        2. 異常的拋出2.1 通過PLSQL引擎自動處理2.1.1 概念: 當數(shù)據(jù)庫或PL/SQL在運行時發(fā)生錯誤時,一個異常被PL/SQL運行時引擎自動拋出2.1.2 例子: 系統(tǒng)自導(dǎo)拋出異常,并處理  

8、            2.2 通過Raise 2.2.1 概念: 異常也可以通過RAISE語句拋出RAISE exception_name;               顯式拋出異常是程序員處理聲明的異常的習(xí)慣用法,但RAISE不限于聲明了的異常,它可以拋出任何任何異常。例如,你希望用TIMEOUT_ON_RESOU

9、RCE錯誤檢測新的運行時異常處理器2.2.2 例子: 通過raise語句將異常拋出               2.3 通過Raise_Application_Error 2.3.1 概念: RAISE_APPLICATION_ERROR 內(nèi)建函數(shù)用于拋出一個異常并給異常賦予一個錯誤號以及錯誤信息。           

10、;        自定義異常的缺省錯誤號是+1,缺省信息是 User_Defined_Exception。                   RAISE_APPLICATION_ERROR函數(shù)能夠在pl/sql程序塊的執(zhí)行部分和異常部分調(diào) 用,顯式拋出帶特殊錯誤號的命名異常。      

11、             Raise_application_error(error_number,message,true,false)                   錯誤號的范圍是-20,000到-20,999。錯誤信息是文本字符串,最多為2048字節(jié)。TRUE和FALSE表示是添加(TR

12、UE)進錯誤堆(ERROR STACK)還是覆蓋(overwrite)錯誤堆(FALSE)2.3.2 例子: 通過raise_application_error語句將異常拋出3. 異常的處理3.1 用戶自定異常處理 、 系統(tǒng)自帶異常處理、 未知異常處理以下一個簡單的例子說明了程式三種異常的捕捉和處理3.2 在聲明階段中異常 以下一個簡單的例子說明了在聲明階段的異常,一般來說package執(zhí)行過程中很少遇到這種錯誤,因為在編譯過程中就會審計除非所引用的table的結(jié)構(gòu)發(fā)生變化,導(dǎo)致引用失敗4. 異常的傳播4.1 如果異常發(fā)生在執(zhí)行塊當一個異常錯誤在執(zhí)行部分引發(fā)時,有

13、下列情況:如果當前塊對該異常錯誤設(shè)置了處理,則執(zhí)行它并成功完成該塊的執(zhí)行,然后控制轉(zhuǎn)給包含塊。如果沒有對當前塊異常錯誤設(shè)置定義處理器,則通過在包含塊中引發(fā)它來傳播異常錯誤。然后對該包含塊執(zhí)行步驟4.2 如果異常發(fā)生在聲明塊 如果在聲明部分引起異常情況,即在聲明部分出現(xiàn)錯誤,那么該錯誤就能影響到其它的塊5. 異常的SQLCode 和 SQL Errm5.1 概念由于ORACLE 的錯信息最大長度是512字節(jié),為了得到完整的錯誤提示信息,我們可用 SQLERRM和 SUBSTR 函數(shù)一起得到錯誤提示信息,方便進行錯誤,特別是如果WHEN OTHERS異常處理器時更為方便。· S

14、QLCODE  返回遇到的Oracle 錯誤號· SQLERRM  返回遇到的Oracle錯誤信息5.2 例子產(chǎn)生SQLCode和SQLErrm6. Oracle fnd_file.output 和 fnd_file.log 6.1 fnd_file.output用于Request輸出報表產(chǎn)生layout,一般不能在這里寫log語句6.2 fnd_file.log用于存放程式log記錄,用于寫log,程式異常處理記錄都可以通過這個api進行記錄7. 附件 7.1 附件 - Oracle自帶異常列表· ACCESS_INTO_

15、NULL                     未定義對象  · CASE_NOT_FOUND                       

16、;CASE 中若未包含相應(yīng)的 WHEN ,并且沒有設(shè)置 ELSE 時  · COLLECTION_IS_NULL                  集合元素未初始化  · CURSER_ALREADY_OPEN         &

17、#160;    游標已經(jīng)打開  · DUP_VAL_ON_INDEX                    唯一索引對應(yīng)的列上有重復(fù)的值  · INVALID_CURSOR            &

18、#160;           在不合法的游標上進行操作  · INVALID_NUMBER                        內(nèi)嵌的 SQL 語句不能將字符轉(zhuǎn)換為數(shù)字  · NO_DATA_FOUND      &#

19、160;                 使用 select into 未返回行,或應(yīng)用索引表未初始化的元素時  · TOO_MANY_ROWS                       執(zhí)行 select into&

20、#160;時,結(jié)果集超過一行  · ZERO_DIVIDE                              除數(shù)為 0  · SUBSCRIPT_BEYOND_COUNT      

21、;  元素下標超過嵌套表或 VARRAY 的最大值  · SUBSCRIPT_OUTSIDE_LIMIT         使用嵌套表或 VARRAY 時,將下標指定為負數(shù)  · VALUE_ERROR                     

22、;        賦值時,變量長度不足以容納實際數(shù)據(jù)  · LOGIN_DENIED                            PL/SQL 應(yīng)用程序連接到 oracle 數(shù)據(jù)庫時,提供了不正確的用戶名或密碼 

23、; · NOT_LOGGED_ON                        PL/SQL 應(yīng)用程序在沒有連接 oralce 數(shù)據(jù)庫的情況下訪問數(shù)據(jù)  · PROGRAM_ERROR                        PL/SQL 內(nèi)部問題,可能需要重裝數(shù)據(jù)字典 pl./SQL 系統(tǒng)包 

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論