• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            DB2 中游標的使用以及 存儲過程的寫法

            Posted on 2010-03-18 22:45 Prayer 閱讀(189) 評論(0)  編輯 收藏 引用 所屬分類: DB2

            問題1:
            什么時候才會發(fā)生not found異常 ,以及db2中sqlcode的值是如何變化的?
                在db2中,一條select 語句也有可能發(fā)生not found異常,譬如
            declare sqlcode integer default 0;
            declare sql_code integer default 0;
            declare classCode varchar(40) ;
            select app_class_code into classCode from kf_app_class where app_name='無效記錄';
            set sql_code=sqlcode;
            如果此時沒有檢索到記錄,那么sqlcode的值為100,有的話為0;
            我們可以定義NOT FOUND 異常處理

            declare sqlcode integer default 0;
            declare sql_code integer default 0;
            declare classCode varchar(40) ;
            begin
            declare continue handler for not found
            begin
              --注如果發(fā)生not found那么此時的sqlcode必定為100
              set sql_code=sqlcode;/*在這里sqlcode的值為100;*/
              --如果再次得到sqlcode的值那么它的值變?yōu)?
              set sql_code=sqlcode;/*這里sqlcode變成了0,因為上一條語句執(zhí)行成功了,那么sqlcode變成了0*/
            end;
            select app_class_code into classCode from kf_app_class where app_name='無效記錄';
            set sql_code=sqlcode;/*同理此時如果沒有取到數(shù)據(jù),那么會進declare continue handler ,返回后sqlcode的值也為0*/
            end;
            所以我們可以通過兩種方法來捕獲和處理not found
            方法1:

            begin
              declare continue handler for not found
              begin
                 --異常處理代碼
              end;
              sql語句
            end;
            方法2:

            begin

              sql語句
              if sqlcode=100 then
              --異常處理代碼
              end if;
            end;
            問題2:
            定義了游標,怎么fecth一條記錄,怎么進行循環(huán)?
            Q:定義了游標假設(shè)發(fā)生not found 異常,那么是在open cursorName的時候還是在fecth的時候發(fā)生異常?
            A:檢驗游標中的數(shù)據(jù)是否取完或者有無記錄,應(yīng)該在fecth的時候,而不是發(fā)生在open cursorName的時候,
            下面一個例子詳細的說明了游標使用過程

            begin
              declare sqlcode  integer default 0;
              declare app_code varchar(10);
              declare cursor1 cursor for select app_code from kf_app_class ;
              open cursor1;
              cursorLoop:
              loop
                 fecth cursor1 into app_code ;
                 if sqlcode=100 then leave cursorLoop;
                 end if;  
              end loop;
            end;

            Q:sqlcode 可以直接用嗎?
            A:在db2中,如果要使用sqlcode那么必須在使用前declare;
            譬如
            declare sqlcode integer default 0;
            if sqlcode =? then
            end if;
            附注
            db2的其他異常處理

            對應(yīng) oracle的 when other exceptions

            declare exit handler for sqlwaring,sqlexcption
            begin
            --處理異常
            end;

            當程序執(zhí)行exit handler異常處理后,那么會退出程序,不會在接著執(zhí)行,也就是


            declare exit handler for sqlwaring,sqlexcption
            begin
            --處理異常
            end;
            sql語句1;
            sql語句2;
            執(zhí)行sql語句1發(fā)生異常,會進入 exit handler ,然后退出程序,不會在執(zhí)行 sql語句2
            執(zhí)行sql語句1發(fā)生異常,會進入 exit handler ,然后退出程序,不會在執(zhí)行 sql語句2

            一本久久免费视频| 久久九九亚洲精品| 伊人久久大香线蕉亚洲| 久久精品国产亚洲AV不卡| 一本一本久久A久久综合精品 | 色婷婷综合久久久久中文一区二区| 久久久久久伊人高潮影院| 丰满少妇高潮惨叫久久久| 国产精品九九久久免费视频| 伊人久久大香线蕉无码麻豆| 久久久久久综合一区中文字幕| 久久久久久久综合综合狠狠| 久久国产AVJUST麻豆| 久久久久久免费一区二区三区 | 91亚洲国产成人久久精品| 欧美久久综合九色综合| 国产精品久久久久久久| 久久亚洲熟女cc98cm| 久久艹国产| 国产欧美久久久精品| 狠狠色丁香久久婷婷综合_中 | 97精品依人久久久大香线蕉97| 伊人久久精品线影院| 亚洲国产一成人久久精品| 要久久爱在线免费观看| 品成人欧美大片久久国产欧美...| 99精品久久久久久久婷婷| 亚洲国产成人久久一区久久| 久久成人精品视频| 国产美女久久精品香蕉69| 亚洲国产欧美国产综合久久 | 97久久综合精品久久久综合| 久久精品国产男包| 少妇无套内谢久久久久| 色综合合久久天天给综看| 久久久久一级精品亚洲国产成人综合AV区| 午夜精品久久久久久中宇| 伊人久久大香线蕉av不卡| 亚洲成色www久久网站夜月| A级毛片无码久久精品免费| 伊人久久大香线蕉av不变影院|