• <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)系 :: 聚合  :: 管理

            游標中rollback引起游標關(guān)閉

            Posted on 2009-12-16 10:47 Prayer 閱讀(498) 評論(0)  編輯 收藏 引用 所屬分類: DB2CLI
            無論是否使用with hold與否,rollback將釋放session中的游標。commit只釋放不帶with hold的游標。

            保持游標打開的方法是在定義游標時加上with hold選項
            但是,我declare 游標時使用了with hold選項--只對commit有效。

            程序段:
            declare test_cur cursor with hold for
                 select .... from A where ... order by ... with ur;

            open test_cur;
            while( 1 ){
                fecth test_cur into ......;
                判斷SQLCODE

                begin_work();           /* 其實就是設(shè)置了一個標志 */
                SQL 操作,修改其他表或者游標所在表的數(shù)據(jù)。
               根據(jù)結(jié)果判斷 commit or rollback。    /* 此處如果rollback 游標被關(guān)閉 */
            }

            異常狀態(tài):
            如果游標中進行了SQL操作,根據(jù)結(jié)果判斷并rollback時,
            下一次fetch時,會提示 501 沒有打開游標。從而報錯退出。



            這種方案是否可行

            游標改用普通游標。
            游標取出當前記錄后,fork子進程。
            主進程只管從游標取數(shù)。
            子進程進行事務、處理、判斷、修改狀態(tài)、提交等等。
            主進程等子進程的結(jié)束信號,然后取下一條記錄。
            程序段:
            declare test_cur cursor with hold for
                 select .... from A where ... order by ... with ur;

            open test_cur;
            while( 1 ){
                fecth test_cur into ......;
                判斷SQLCODE

                pid = fork();

                if( pid == 0 ) {    /* 子進程干活 */
                        sqledtin( &sqlca );
                        setsid();
                        signal( SIGHUP, SIG_IGN );

                        db_disconn( G_mdb_name );
                        begin_work();           /* 其實就是設(shè)置了一個標志 */
                        SQL 操作,修改其他表或者游標所在表的數(shù)據(jù)。
                    根據(jù)結(jié)果判斷 commit or rollback。   
                    db_disconn();
                        exit();
                }

                /* 主進程等待子進程結(jié)束 */
            }
            close test_cur;

            如果是兩個不同的事務的話,你用CLI來寫比較方便

            在cursor內(nèi)部設(shè)立一個savepoint, rollback時用
            rollback to savepoint a;

            大香伊人久久精品一区二区| 久久免费美女视频| 久久综合综合久久97色| 国产69精品久久久久9999APGF| 国内精品久久久久久久久| 国产V综合V亚洲欧美久久| 久久精品国产亚洲AV电影| 人人狠狠综合久久88成人| 久久精品国产黑森林| 开心久久婷婷综合中文字幕| 欧美麻豆久久久久久中文| 亚洲七七久久精品中文国产| 日本WV一本一道久久香蕉| 伊人久久大香线蕉av一区| 精品少妇人妻av无码久久| 国产日产久久高清欧美一区| 久久99久久99小草精品免视看| 久久综合狠狠色综合伊人| 国产精品久久99| 久久99热这里只有精品国产| 国产免费久久久久久无码| 亚洲欧洲精品成人久久奇米网| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久人人爽人人爽人人片AV不 | 久久精品国产AV一区二区三区| 日本精品久久久久久久久免费| 久久久网中文字幕| 久久午夜无码鲁丝片秋霞| 国产69精品久久久久9999APGF | 乱亲女H秽乱长久久久| 日日躁夜夜躁狠狠久久AV| 国产亚洲美女精品久久久久狼| 香蕉久久夜色精品国产2020 | 久久电影网一区| 精品国产热久久久福利| 久久99这里只有精品国产| 国产精品久久久久9999高清| 日本国产精品久久| 国产99久久久国产精品~~牛| 久久精品午夜一区二区福利| 国产伊人久久|