欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle怎么創(chuàng)建異常 oracle自定義異常處理

Oracle異常分類小記

前幾天看《Oracle PL/SQL Programming》的異常處理部分 粗粗看了一遍 覺得有點(diǎn)亂 根據(jù)自己的理解作了一下分類 并相應(yīng)給了一些簡(jiǎn)例 不一定很準(zhǔn)確 供參考

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、潁東網(wǎng)站維護(hù)、網(wǎng)站推廣。

Oracle 異常

具名 Oracle 異常

Oracle 為此類異常預(yù)先指定了異常號(hào) 異常信息 異常名稱

匿名 Oracle 異常

Oracle 為此類異常預(yù)先指定了異常號(hào) 異常信息 但未指定異常名稱

自定義異常

普通自定義異常

與 Oracle 無關(guān)的業(yè)務(wù)邏輯異常 無異常號(hào) 異常信息 異常名稱需要手工聲明

應(yīng)用程序異常 ( Raise_Application_Error )

與 Oracle 無關(guān)的業(yè)務(wù)邏輯異常 此方法拋出的異常可以自定義異常號(hào)及異常信息 可以通過 Exception_Init 綁定到手工聲明的異常名稱上

)Oracle異常

Oracle異常總是由Oracle檢測(cè)并自動(dòng)拋出的

)具名Oracle異常

Oracle定義了 個(gè)具名的Oracle異常 比如

Dup_val_on_index(ora )當(dāng)中唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)

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

流程

A)在Exception模塊按異常名進(jìn)行處理

示例

DECLARE

num number;

BEGIN

num:= / ;

EXCEPTION

when ZERO_DIVIDE then

dbms_output put_line(SQLERRM);

END;

/

ORA : divisor is equal to zero

PL/SQL procedure successfully pleted

)匿名Oracle異常

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

ORA : parent key not found

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

流程

A)聲明異常

B)將此異常綁定到Oracle異常號(hào)上

C)在Exception模塊按異常名進(jìn)行處理

示例

DECLARE

ex EXCEPTION;

PRAGMA EXCEPTION_INIT(ex );

BEGIN

insert into t values( );

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

END;

/

ORA : integrity constraint (ADMIN FK ) violated parent key not found

PL/SQL procedure successfully pleted

)自定義異常

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

)普通自定義異常

流程

A)聲明異常

B)使用Raise語(yǔ)句拋出異常

C)在Exception模塊按異常名進(jìn)行處理

示例

DECLARE

ex EXCEPTION;

BEGIN

RAISE ex;

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

dbms_output put_line( i raised a user defined exception ex );

END;

/

User Defined Exception

i raised a user defined exception ex

)應(yīng)用程序異常Raise_Application_Error(Num Msg)

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

對(duì)于此類異常 由于Num是自定義的 因此應(yīng)該有相應(yīng)的管理辦法以避免重復(fù)使用異常號(hào) 比如可以將已使用的異常號(hào)保存在一張數(shù)據(jù)庫(kù)中表 以便將來檢查

流程

A)聲明異常

B)將此異常綁定到自定義的異常號(hào)上

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

D)在Exception模塊按異常名進(jìn)行處理

示例

CREATE OR REPLACE PROCEDURE mtest

is

ex EXCEPTION;

PRAGMA EXCEPTION_INIT(ex );

BEGIN

Raise_Application_Error( raising my exception );

EXCEPTION

when ex then

dbms_output put_line(SQLERRM);

END;

/

Procedure created

SQL exec mtest

ORA : raising my exception

lishixinzhi/Article/program/Oracle/201311/18175

oracle拋出自定義的異常用什么關(guān)鍵字

如果用自定義異常則可以創(chuàng)建如下代碼

Sql代碼

declare

row_count int;

begin

select count(*) into row_count from tree_table where parent_id = '0001' ;

if (row_count 0) then

RAISE_APPLICATION_ERROR(-20001, '該節(jié)點(diǎn)有子節(jié)點(diǎn),不能被刪除。');

end if;

select count(*) into row_count from tree_table where id = '0001' and status 1 ;

if (row_count 0) then

RAISE_APPLICATION_ERROR(-20002, '該節(jié)點(diǎn)已被確認(rèn),不能被刪除。');

end if;

delete from tree_table where id = '0001';

end;

oracle 用戶自定義異常

--設(shè):要拋出的異常叫做ex_no_data,要判斷是否小于0的變量為:v_data,則:

DECLARE

--聲明異常

ex_no_data EXCEPTION; -- Exception to indicate an error condition

v_data NUMBER; -- Variable to hold data

--v_ErrorCode NUMBER; -- Variable to hold the error message code

--v_ErrorText VARCHAR2(200); -- Variable to hold the error message text

BEGIN

--拋出異常

IF v_data 0 THEN --(括號(hào)內(nèi)填拋出異常的條件)

RAISE ex_no_data;

END IF;

--捕捉異常

EXCEPTION

WHEN ex_no_data THEN

dbms_output.put_line(v_data);

--捕捉其他異常,并獲得 捕獲異常的內(nèi)容

WHEN OTHERS THEN

null;

-- v_ErrorCode := SQLCODE;

-- v_ErrorText := SUBSTR(SQLERRM, 1, 200);

-- 注意這里用SUBSTR 來截取錯(cuò)誤消息

--dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);

END;

/

---另可參考我之前的一個(gè)帖子:

如何處理用戶自定義異常 oracle

當(dāng)與一個(gè)異常錯(cuò)誤相關(guān)的錯(cuò)誤出現(xiàn)時(shí),就會(huì)隱含觸發(fā)該異常錯(cuò)誤。用戶定義的異常錯(cuò)誤是通過顯式使用?RAISE?語(yǔ)句來觸發(fā)。當(dāng)引發(fā)一個(gè)異常錯(cuò)誤時(shí),控制就轉(zhuǎn)向到?EXCEPTION塊異常錯(cuò)誤部分,執(zhí)行錯(cuò)誤處理代碼。

對(duì)于這類異常情況的處理,步驟如下:

1、在PL/SQL?塊的定義部分定義異常情況:

異常情況??EXCEPTION;

2、RAISE?異常情況;

3、在PL/SQL?塊的異常情況處理部分對(duì)異常情況做出相應(yīng)的處理。

例:更新指定員工工資,增加100;

DECLARE

v_empno?employees.employee_id%TYPE?:=empno;

no_result??EXCEPTION;

BEGIN

UPDATE?employees?SET?salary?=?salary+100?WHERE?employee_id?=?v_empno;

IF?SQL%NOTFOUND?THEN

RAISE?no_result;

END?IF;

EXCEPTION

WHEN?no_result?THEN?

DBMS_OUTPUT.PUT_LINE('數(shù)據(jù)更新語(yǔ)句失敗了!');

WHEN?OTHERS?THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);

END;

1、彈出錯(cuò)誤框:

示例代碼:

declare

v_count number;

begin

select count(*) into v_count from dept;

if v_count 10 then

raise_application_error(-20001,'數(shù)量小于10');

end if;

end;

執(zhí)行結(jié)果:

2、控制臺(tái)顯示:

示例代碼:

declare

v_count number;

my_exp exception;

begin

select count(*) into v_count from dept;

if v_count 10 then

raise my_exp;

end if;

exception

when my_exp then

dbms_output.put_line('數(shù)量小于10');

when others then

dbms_output.put_line('其他異常');

end;

執(zhí)行結(jié)果:

PS:ORACLE 用戶自定義異常小例子:

CREATE OR REPLACE PROCEDURE test_Exception_byLeejin

(

ParameterA IN varchar,

ParameterB IN varchar,

ErrorCode OUT varchar --返回值,錯(cuò)誤編碼

)

AS

/*以下是一些變量的定義*/

V NUMBER;

V nvarchar();

V NUMBER;

APP_EXP EXCEPTION; --自定義異常

BEGIN

ErrorCode :='';

IF (ParameterA=ParameterB) THEN

ErrorCode := 'ParameterA = ParameterB';

RAISE APP_EXP; -- 拋出異常

END IF;

EXCEPTION

WHEN APP_EXP THEN --在處理異常

RAISE_APPLICATION_ERROR(-,ErrorCode);

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR(-,'未知異常');

END;

分享題目:oracle怎么創(chuàng)建異常 oracle自定義異常處理
分享URL:http://chinadenli.net/article16/hgpgdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)網(wǎng)站設(shè)計(jì)網(wǎng)站內(nèi)鏈Google用戶體驗(yàn)軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化