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

首頁 > 數據庫 > Oracle > 正文

Oracle例外用法實例詳解

2024-08-29 13:58:54
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Oracle例外用法,結合實例形式較為詳細的分析了Oracle例外的概念,功能及相關使用技巧,需要的朋友可以參考下
 

本文實例講述了Oracle例外用法。分享給大家供大家參考,具體如下:

一、例外分類

oracle將例外分為預定義例外、非預定義例外和自定義例外三種。

1)、預定義例外用于處理常見的oracle錯誤。

2)、非預定義例外用于處理預定義例外不能處理的例外。

3)、自定義例外用于處理與oracle錯誤無關的其它情況。

下面通過一個小案例演示如果不處理例外看會出現什么情況?

編寫一個存儲過程,可接收雇員的編號,并顯示該雇員的姓名。

sql代碼如下:

SET SERVEROUTPUT ON;DECLARE V_ENAME EMP.ENAME%TYPE;BEGIN SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = &GNO; DBMS_OUTPUT.PUT_LINE('名字:' || V_ENAME);END;/

隨便輸入不存在的編號,回車,會拋出如下異常:

ORA-01403: 未找到數據
ORA-06512: 在line 6

例外捕獲的sql代碼如下:

SET SERVEROUTPUT ON;DECLARE V_ENAME EMP.ENAME%TYPE;BEGIN SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = &GNO; DBMS_OUTPUT.PUT_LINE('名字:' || V_ENAME);EXCEPTION WHEN no_data_found THEN  DBMS_OUTPUT.PUT_LINE('編號未找到!');END;/

隨便輸入不存在的編號,回車,會友情提示:編號未找到!

二、處理預定義例外

預定義例外是由pl/sql所提供的系統例外。當pl/sql應用程序違反了oracle規定的限制時,則會隱含的觸發一個內部例外。pl/sql為開發人員提供了二十多個預定義例外。我們給大家介紹常用的例外。

1)、case_not_found預定義例外

在開發pl/sql塊中編寫case語句時,如果在when子句中沒有包含必須的條件分支,就會觸發case_not_found例外:

SET SERVEROUTPUT ON;CREATE OR REPLACE PROCEDURE SP_PRO6(SPNO NUMBER) IS V_SAL EMP.SAL%TYPE;BEGIN SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = SPNO; CASE  WHEN V_SAL < 1000 THEN   UPDATE EMP SET SAL = SAL + 100 WHERE EMPNO = SPNO;  WHEN V_SAL < 2000 THEN   UPDATE EMP SET SAL = SAL + 200 WHERE EMPNO = SPNO; END CASE;EXCEPTION WHEN CASE_NOT_FOUND THEN  DBMS_OUTPUT.PUT_LINE('case語句沒有與' || V_SAL || '相匹配的條件');END;/--調用存儲過程SQL> EXEC SP_PRO6(7369);

case語句沒有與4444相匹配的條件

2)、cursor_already_open預定義例外

當重新打開已經打開的游標時,會隱含的觸發cursor_already_open例外

DECLARE CURSOR EMP_CURSOR IS  SELECT ENAME, SAL FROM EMP;BEGIN OPEN EMP_CURSOR; --聲明時游標已打開,所以沒必要再次打開 FOR EMP_RECORD1 IN EMP_CURSOR LOOP  DBMS_OUTPUT.PUT_LINE(EMP_RECORD1.ENAME); END LOOP;EXCEPTION WHEN CURSOR_ALREADY_OPEN THEN  DBMS_OUTPUT.PUT_LINE('游標已經打開');END;/

3)、dup_val_on_index預定義例外

在唯一索引所對應的列上插入重復的值時,會隱含的觸發例外

BEGIN INSERT INTO DEPT VALUES (10, '公關部', '北京');EXCEPTION WHEN DUP_VAL_ON_INDEX THEN  DBMS_OUTPUT.PUT_LINE('在deptno列上不能出現重復值');END;/

4)、invalid_cursorn預定義例外

當試圖在不合法的游標上執行操作時,會觸發該例外

例如:試圖從沒有打開的游標提取數據,或是關閉沒有打開的游標。則會觸發該例外

DECLARE CURSOR EMP_CURSOR IS  SELECT ENAME, SAL FROM EMP; EMP_RECORD EMP_CURSOR%ROWTYPE;BEGIN --open emp_cursor; --打開游標 FETCH EMP_CURSOR INTO EMP_RECORD; DBMS_OUTPUT.PUT_LINE(EMP_RECORD.ENAME); CLOSE EMP_CURSOR;EXCEPTION WHEN INVALID_CURSOR THEN  DBMS_OUTPUT.PUT_LINE('請檢測游標是否打開');END;/

5)、invalid_number預定義例外

當輸入的數據有誤時,會觸發該例外

比如:數字100寫成了loo就會觸發該例外

SET SERVEROUTPUT ON;BEGIN UPDATE EMP SET SAL = SAL + 'AAA';EXCEPTION WHEN INVALID_NUMBER THEN  DBMS_OUTPUT.PUT_LINE('輸入的數字不正確');END;/

6)、no_data_found預定義例外

下面是一個pl/sql 塊,當執行select into沒有返回行,就會觸發該例外

SET serveroutput ON;DECLARE V_SAL EMP.SAL%TYPE;BEGIN SELECT SAL INTO V_SAL FROM EMP WHERE ENAME = 'ljq';EXCEPTION WHEN NO_DATA_FOUND THEN  DBMS_OUTPUT.PUT_LINE('不存在該員工');END;/

7)、too_many_rows預定義例外

當執行select into語句時,如果返回超過了一行,則會觸發該例外。

DECLARE V_ENAME EMP.ENAME%TYPE;BEGIN SELECT ENAME INTO V_ENAME FROM EMP;EXCEPTION WHEN TOO_MANY_ROWS THEN  DBMS_OUTPUT.PUT_LINE('返回了多行');END;/

8)、zero_divide預定義例外

當執行2/0語句時,則會觸發該例外

9)、value_error預定義例外

當在執行賦值操作時,如果變量的長度不足以容納實際數據,則會觸發該例外value_error

其它預定義例外(這些例外不是在pl/sql里觸發的,而是在用oracle時觸發的,所以取名叫其它預定義例外)

1、login_denied

當用戶非法登錄時,會觸發該例外

2、not_logged_on

如果用戶沒有登錄就執行dml操作,就會觸發該例外

3、storage_error

如果超過了內存空間或是內存被損壞,就觸發該例外

4、timeout_on_resource

如果oracle在等待資源時,出現了超時就觸發該例外

三、非預定義例外

非預定義例外用于處理與預定義例外無關的oracle錯誤。使用預定義例外只能處理21個oracle 錯誤,而當使用pl/sql開發應用程序時,可能會遇到其它的一些oracle錯誤。比如在pl/sql塊中執行dml語句時,違反了約束規定等等。在這樣的情況下,也可以處理oracle的各種例外,因為非預定義例外用的不多,這里我就不舉例了。

四、處理自定義例外

預定義例外和自定義例外都是與oracle錯誤相關的,并且出現的oracle 錯誤會隱含的觸發相應的例外;而自定義例外與oracle 錯誤沒有任何關聯,它是由開發人員為特定情況所定義的例外.

問題:請編寫一個pl/sql 塊,接收一個雇員的編號,并給該雇員工資增加1000元,如果該雇員不存在,請提示。

CREATE OR REPLACE PROCEDURE EX_TEST(SPNO NUMBER) ISBEGIN UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = SPNO;END;/--調用存儲過程,EXEC EX_TEST(56);

這里,編號為56 是不存在的,剛才的報異常了,為什么現在不報異常呢?
因為剛才的是select語句

怎么解決這個問題呢? 修改代碼,如下:

--自定義例外CREATE OR REPLACE PROCEDURE EX_TEST(SPNO NUMBER) IS--定義一個例外MYEX EXCEPTION;BEGIN--更新用戶salUPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = SPNO;--sql%notfound 這是表示沒有update--raise myex;觸發myexIF SQL%NOTFOUND THEN RAISE MYEX;END IF;EXCEPTIONWHEN MYEX THEN DBMS_OUTPUT.PUT_LINE('沒有更新任何用戶');END;/

現在再測試一次:

SQL> exec ex_test(56);

沒有更新任何用戶

希望本文所述對大家Oracle數據庫程序設計有所幫助。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品在线播放| 国产精品久久视频| 欧美激情中文字幕乱码免费| 亚洲精品日韩丝袜精品| 亚洲人成亚洲人成在线观看| 成人午夜在线影院| 国产91精品青草社区| 精品国产拍在线观看| 中文字幕日韩欧美在线| 欧美一区亚洲一区| 亚洲japanese制服美女| 久久精品夜夜夜夜夜久久| 91在线观看免费高清完整版在线观看| 一个色综合导航| 亚洲在线免费看| 欧美日韩福利在线观看| 日韩精品在线电影| 国产精品国产三级国产aⅴ9色| 欧美大秀在线观看| 91香蕉嫩草神马影院在线观看| 色综合天天狠天天透天天伊人| 国产在线视频欧美| 日韩av在线一区| 中文字幕欧美日韩精品| 成人av电影天堂| 九九热这里只有精品免费看| 尤物yw午夜国产精品视频| 丝袜亚洲另类欧美重口| 亚洲精品国产电影| 精品国产老师黑色丝袜高跟鞋| 蜜月aⅴ免费一区二区三区| 日本道色综合久久影院| 国产精品一区二区三区久久久| 欧日韩在线观看| 在线观看欧美日韩国产| 狠狠躁夜夜躁人人爽天天天天97| 日韩av成人在线| 夜夜躁日日躁狠狠久久88av| 欧美xxxx18性欧美| 欧美性xxxx18| 国产亚洲精品一区二区| 亚洲成色999久久网站| 91视频国产高清| 91免费高清视频| 国模gogo一区二区大胆私拍| 国模吧一区二区三区| 亚洲色图偷窥自拍| 亚洲精品久久在线| 日韩精品高清在线| 国产精品入口日韩视频大尺度| 欧美激情亚洲国产| 在线观看久久av| 久久久久久999| 日韩高清电影免费观看完整| 国产欧美久久一区二区| 欧美日韩另类视频| 久久综合久中文字幕青草| 国产在线拍揄自揄视频不卡99| 欧美高清不卡在线| 在线日韩av观看| 欧美视频裸体精品| 欧美黑人xxxⅹ高潮交| 亚洲丁香久久久| 成人激情视频小说免费下载| 午夜精品福利电影| 欧美裸体xxxx极品少妇软件| 91精品综合久久久久久五月天| 欧美日本国产在线| 日本精品视频在线观看| 九九久久精品一区| 欧美激情中文字幕在线| 久久亚洲国产精品| 欧美激情女人20p| 欧美极品美女视频网站在线观看免费| 亚洲成人精品久久| 91丝袜美腿美女视频网站| 日本精品久久久久久久| 国产综合在线观看视频| 国产美女被下药99| 日韩中文字幕亚洲| 成人激情视频在线播放| 亚洲第一综合天堂另类专| 欧美夫妻性生活xx| 中文字幕欧美日韩精品| 欧美高清无遮挡| 国产噜噜噜噜噜久久久久久久久| 91精品国产91久久| 久久人人爽人人爽人人片亚洲| 欧美精品videofree1080p| 亚洲第一精品久久忘忧草社区| 日韩一中文字幕| 精品亚洲aⅴ在线观看| 91亚洲va在线va天堂va国| 国外成人在线视频| 欧美巨乳在线观看| 欧美黑人极品猛少妇色xxxxx| 永久555www成人免费| 少妇av一区二区三区| 国产一区二区三区18| 一区二区在线视频播放| 欧美国产精品日韩| 日韩av在线免费播放| 日韩av免费在线看| 久久国产精品视频| 亚洲精品一区中文字幕乱码| www国产精品视频| 欧美电影在线观看网站| 国产综合在线观看视频| 亚洲精品美女网站| 久久夜色精品国产亚洲aⅴ| 日韩综合中文字幕| 91免费精品国偷自产在线| 91日本在线观看| 国产精品久久视频| 琪琪第一精品导航| 亚洲日韩欧美视频| 国产精品福利在线| 国产精品一区二区女厕厕| 亚洲一区二区免费在线| 欧美极品在线视频| 青草青草久热精品视频在线观看| 国产精品一区二区3区| 欧美黄色小视频| 亚洲天堂第二页| 国产国产精品人在线视| 亚洲自拍偷拍色片视频| 亚洲国产精品小视频| 热久久视久久精品18亚洲精品| 2019国产精品自在线拍国产不卡| 亚洲国产精品va在线看黑人| 欧美一区二区三区免费观看| 美女久久久久久久| 亚洲精品一区中文| 亚洲视频综合网| 45www国产精品网站| 久久久之久亚州精品露出| 91av视频导航| 国产精品www| 久久国产精彩视频| 日韩在线观看免费网站| 色综合久久中文字幕综合网小说| www.xxxx精品| xxxxxxxxx欧美| 国产欧美精品xxxx另类| 92福利视频午夜1000合集在线观看| 91精品久久久久久久久久久久久久| 在线电影欧美日韩一区二区私密| 精品精品国产国产自在线| 国产日韩欧美影视| 亚洲精品色婷婷福利天堂| 91网站在线看| 色一区av在线| 一本一本久久a久久精品牛牛影视| 国产亚洲精品美女| 亚洲大胆人体在线| 国产一区二区三区免费视频| 91免费电影网站| 久久亚洲私人国产精品va| 2019中文字幕在线免费观看| 亚洲精品综合精品自拍| 久久免费视频这里只有精品| 国产精品流白浆视频| 国模精品视频一区二区三区| 亚洲欧美国产精品专区久久|