溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ORACLE異常處理

發(fā)布時(shí)間:2020-08-10 17:13:12 來(lái)源:ITPUB博客 閱讀:118 作者:KFCLYY 欄目:關(guān)系型數(shù)據(jù)庫(kù)

項(xiàng)目開(kāi)發(fā)的代碼幾乎是做不到?jīng)]有BUG的,所以需要捕捉代碼運(yùn)行過(guò)程中出現(xiàn)的異常并且進(jìn)行處理。PL/SQL使用異常處理框架來(lái)跟蹤并對(duì)錯(cuò)誤做出響應(yīng)。

一、異常處理概念

任何類型的錯(cuò)誤都按程序異常對(duì)待,異??赡軄?lái)源于:系統(tǒng)產(chǎn)生的錯(cuò)誤、用戶動(dòng)作導(dǎo)致的錯(cuò)誤和應(yīng)用程序向用戶發(fā)出的警告。如果PL/SQL發(fā)生了一個(gè)錯(cuò)誤,就會(huì)拋出一個(gè)異常,當(dāng)前PL/SQL塊中執(zhí)行單元就會(huì)暫停處理??刂妻D(zhuǎn)向當(dāng)前塊的異常處理單元,完成異常處理后就不能再返回到當(dāng)前塊,而是將控制轉(zhuǎn)移到外層包圍塊。如果外層包圍塊沒(méi)有對(duì)異常處理,則錯(cuò)誤會(huì)繼續(xù)向外層拋出,直到拋給使用者。

二、異常定義

1.聲明有名異常

在PL/SQL的聲明部分可以自定義異常的名稱,方式如下:

exception_name EXCEPTION;

引用異常的名字有兩種方式:

在代碼的執(zhí)行單元中使用RAISE exception_name;

在異常處理單元使用WHEN語(yǔ)句WHEN exception_name THEN。

2.異常名稱與錯(cuò)誤代碼關(guān)聯(lián)

Oracle只定義了部分異常的名字,其他的錯(cuò)誤只定義了一各錯(cuò)誤數(shù)字和消息,不易于代碼的閱讀和維護(hù)。EXCEPTION_INIT命令可以把名稱和內(nèi)部錯(cuò)誤代碼關(guān)聯(lián)起來(lái),一旦創(chuàng)建了關(guān)聯(lián)關(guān)系,就可以通過(guò)名字來(lái)引用異常。在PL/SQL的聲明部分操作方式如下:

invalid_month EXCEPTION;

PRAGMA EXCEPTION_INIT (invalid_month,-1843);

為了方便引用常見(jiàn)的異常名字,可以構(gòu)建包。

3.拋出異常

程序有3種拋出異常的辦法:

數(shù)據(jù)庫(kù)檢測(cè)到錯(cuò)誤時(shí)可以拋出異常;

使用RAISE語(yǔ)句拋出異常;

使用內(nèi)置的RAISE_APPLICATION_ERROR過(guò)程拋出異常。

三、異常處理

一旦有異常拋出,當(dāng)前PL/SQL塊就會(huì)把控制傳遞給異常處理單元。這個(gè)異?;蛘弑划?dāng)前PL/SQL塊中的處理句柄處理,或者拋給外層塊。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI