<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    PLSQL學習(三) 異常處理
    ?
    ??? 任何一種編程語言中的異常處理部分都是比較重要的一部分,單獨學習一下。
    ?
    ?
    一、異常的種類及基本用法:
    ?
    1、預定義異常(總計21種,具體見文檔)
    ?
    ??? 使用方法:

    ??? BEGIN

    ????? SELECT ...

    ????? SELECT ...

    ????? SELECT ...

    ?? ??? ...

    ??? EXCEPTION ?

    ??? WHEN NO_DATA_FOUND THEN ...

    ?
    ??? 常用類型:

    ??? NO_DATA_FOUND?????? --ORA-01403-- 未找到行

    ??? TOO_MANY_ROWS?????? --ORA-01422--SELECT INTO 語句返回多行數據

    ??? VALUE_ERROR???????? --ORA-06502-- 類型轉換錯誤

    ??? ZERO_DIVIDE???????? --ORA-01476-- 程序嘗試除以 0

    ?STORAGE_ERROR?????? --ORA-06500--PL/SQL 運行時內存溢出或內存不足

    ?

    2、非預定義異常(EXCEPTION_INIT )

    ?

    ??? 方法一:

    ??? 需要在declare中申明,申明后使用即與預定義異常相同

    ??? declare

    ??????e_deptno_remaining exception ;

    ?????? PRAGMA EXCEPTION_INIT (e_deptno_remaining, - 2292 );

    ??? begin

    ??? ...

    ??? exception

    ??? when e_deptno_remaining then

    ??? dbms_output.put_line( ' 非預定義2292 ' );

    ??? when others then

    ??? dbms_output.put_line( 'others' );

    ??? end ;

    ?

    -2292必須是oracle自定義的錯誤號,前面加負號

    如果需要自己設定,則必須在-20000——-20999之間

    此方法無法定義異常信息。

    ?

    ??? 方法二:

    ??? 錯誤號與錯誤信息均可自己定義

    ??? 且無需在declare和exception中聲明

    ??? declare

    ????? i int := 5;

    ??? begin

    ?????if i=5then

    ?????raise_application_error (-20086/*-20000——-20999*/, '自定義錯誤信息');

    ?????endif;

    ??? end;

    ?

    3、自定義異常(分為declare、raise、exception三部分)
    ?
    ??? 使用示例:

    ??? declare

    ????? i int := 3;

    ????? ex exception;

    ??? begin

    ????? if i <=2then

    ????? raise ex;

    ????? else dbms_output.put_line(i);?????????????????????????????

    ????? endif;

    ??? exception

    ????? when ex then

    ????? dbms_output.put_line('xxx');

    ??? end;

    ?

    ?

    二、注意使用Others的異常類:

    ?

    ??? 在EXCEPTION中定義任何的異常后

    ??? 盡量都使用when others

    ??? 表示遭遇到除此之外的任何異常如何處理

    ?

    ??? EXCEPTION

    ????? WHEN exception_name1 THEN?? -- handler

    ??????? sequence_of_statements1

    ????? WHEN exception_name2 THEN?? -- another handler

    ??????? sequence_of_statements2

    ??????? ...

    ????? WHENOTHERSTHEN??????????? -- optional handler

    ??????? sequence_of_statements3

    ??? END;?

    ?

    ??? 另外,在EXCEPTION中可以使用OR鏈接

    ??? WHEN over_limit OR under_limit OR VALUE_ERROR THEN

    ?

    ?

    三、使用系統錯誤號和錯誤信息

    ?

    ??? 錯誤號----SQLCODE;

    ??? 錯誤信息--SQLERRM;

    ??? DECLARE

    ????? err_num?? NUMBER;

    ????? err_msg?? VARCHAR2(100);

    ??? BEGIN

    ????? ...

    ??? EXCEPTION

    ????? WHENOTHERSTHEN

    ??????? err_num??? := SQLCODE;

    ??????? err_msg??? := SUBSTR(SQLERRM, 1, 100);

    ??????? dbms_output.put_line(err_num || '---' || err_msg);

    ??? END;

    ?

    ?

    四、異常傳播的規則

    ?

    ??? 首先,異常是會向他的外層進行傳遞的

    ??? 即如果在當前子塊中未定義異常處理,則會傳遞到外層的異常處理

    ??? 直到異常被捕獲或最終被拋棄

    ?

    ??? 注:聲明中的異常必定無法被當前塊捕獲

    ??? DECLARE

    ??? Abc number(3):='abc';

    ??? ...

    ??? BEGIN

    ??? ...

    ??? EXCEPTION

    ??? WHENOTHERSTHEN

    ??? ...

    ??? END;----即便使用others最終也無法捕獲

    ?

    ?

    ?

    posted on 2008-08-09 22:49 decode360 閱讀(1039) 評論(0)  編輯  收藏 所屬分類: 06.PLSQL
    主站蜘蛛池模板: 国产又黄又爽又猛的免费视频播放| 全部免费a级毛片| 亚洲色成人四虎在线观看| 亚洲AV无码一区二区三区在线观看| 999zyz**站免费毛片| 亚洲av一本岛在线播放| 免费在线观看黄网站| 久久国产免费观看精品3| 亚洲av无码一区二区三区人妖| 日日噜噜噜噜夜夜爽亚洲精品| 免费H网站在线观看的| 成在线人直播免费视频| 亚洲大香伊人蕉在人依线| 亚洲成av人片不卡无码久久| 91成人在线免费观看| 午夜在线免费视频 | 亚洲免费人成视频观看| 夜色阁亚洲一区二区三区| 久久A级毛片免费观看| 无码毛片一区二区三区视频免费播放 | 中文字幕亚洲精品资源网| 国产精品免费视频一区| 最近2019中文字幕免费直播| 青青草国产免费国产是公开| 国产色在线|亚洲| 亚洲国产精品福利片在线观看| 好爽好紧好大的免费视频国产| 美丽姑娘免费观看在线观看中文版| 国产亚洲精品仙踪林在线播放| 亚洲国产品综合人成综合网站| 中文亚洲AV片在线观看不卡| 免费网站看v片在线香蕉| 30岁的女人韩剧免费观看| 9久热精品免费观看视频| 久久精品国产亚洲av瑜伽| 亚洲狠狠狠一区二区三区| 亚洲综合色婷婷七月丁香| 免费在线看片网站| 成在人线AV无码免费| 91精品成人免费国产片| 日本卡1卡2卡三卡免费|