• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

                本文中的存儲(chǔ)過(guò)程示例,預(yù)計(jì)的循環(huán)次數(shù)是yh表行數(shù),由于SELECT IID INTO PINT FROM YH WHERE 0=1;不返回任何行,所以at_end后會(huì)立刻等于1(只循環(huán)一次就退出)。
             

            DECLARE  at_end  INT  DEFAULT  0; 
            DECLARE PIID INTEGER DEFAULT 0 ;
            DECLARE PINT INTEGER DEFAULT 0 ;
            DECLARE  not_found  CONDITION  FOR  SQLSTATE  '02000';
            --DECLARE PCOUNT INTEGER;
            DECLARE  c1  CURSOR  FOR   
            SELECT IID FROM YH; 
            DECLARE  CONTINUE  HANDLER  FOR  not_found 
            SET  at_end  1; 
            OPEN  c1; 
            SET PCOUNT=0;
            ins_loop:
            LOOP 
            FETCH  c1  INTO  PIID; 
            IF  at_end  <>0    THEN 
            LEAVE  ins_loop; 
            END  IF; 
            SET PCOUNT=PCOUNT+1;
            SELECT IID INTO PINT FROM YH WHERE 0=1;
            END LOOP;

             

            http://www.souzz.net/html/database/DB2/69884.html

             

            CREATE PROCEDURE bump_salary_iftest (IN deptnumber SMALLINT)
            LANGUAGE SQL
            BEGIN
              DECLARE SQLSTATE CHAR(5);
              DECLARE v_salary DOUBLE;
              DECLARE v_years SMALLINT;
              DECLARE v_id SMALLINT;
              DECLARE at_end INT DEFAULT 0;
              DECLARE not_found CONDITION FOR SQLSTATE '02000';

              DECLARE C1 CURSOR FOR
                SELECT id, CAST(salary AS DOUBLE), years
                FROM staff;
              DECLARE CONTINUE HANDLER FOR not_found
                SET at_end = 1;

              OPEN C1;
              FETCH C1 INTO v_id, v_salary, v_years;
              WHILE at_end = 0 DO

                  UPDATE staff
                    SET salary = 2150 * v_years
                    WHERE id = -1;

                FETCH C1 INTO v_id, v_salary, v_years;
              END WHILE;
              CLOSE C1;
            END

            請(qǐng)問(wèn),我想讓這個(gè)循環(huán)執(zhí)行完,但是由于SET salary = 2150 * v_years
                    WHERE id = -1 更新的數(shù)據(jù)為0條,at_end變量就被置為1,從而導(dǎo)程序跳出循環(huán),我如何做,能夠及時(shí)更新數(shù)據(jù)為0行
            ,而循環(huán)還能繼續(xù)下去呢,請(qǐng)高手指點(diǎn)
                                                                          


            解決方案:

            可以先計(jì)算循環(huán)次數(shù),根據(jù)這個(gè)數(shù)值進(jìn)行循環(huán) :

            CREATE  PROCEDURE  bump_salary_iftest(IN deptnumber SMALLINT,out iReturn int)
            LANGUAGE  SQL
            BEGIN
                  DECLARE  SQLSTATE  CHAR(5);
                  DECLARE  v_salary  DOUBLE;
                  DECLARE  v_years  SMALLINT;
                  DECLARE  v_id  SMALLINT;
                  DECLARE  at_end  INT  DEFAULT  0;
                  DECLARE  not_found  CONDITION  FOR  SQLSTATE  '02000';
                 
                  Declare  v_temp int;

                  DECLARE  C1  CURSOR  FOR
                      SELECT  id,  CAST(salary  AS  DOUBLE),  years
                      FROM  staff;
                  DECLARE  CONTINUE  HANDLER  FOR  not_found
                      SET  at_end  1;
                     
                  -- get the loop number
              select count(*) into v_temp from staff;
              set iReturn =0;
                  OPEN  C1;
                  FETCH  C1  INTO  v_id,  v_salary,  v_years;
                  WHILE  v_temp>0  DO
                        -- out the iReturn to check the result
            set iReturn =iReturn+1;
                        UPDATE  staff
                              SET  salary  2150  v_years
                              WHERE  id  -1;
                      FETCH  C1  INTO  v_id,  v_salary,  v_years;
                      set v_temp = v_temp-1;
                  END  WHILE;
                  CLOSE  C1;
            END@
             
             
            http://topic.csdn.net/u/20071214/14/2c93b395-76c6-4a9d-b017-6733562edcfa.html

            国产精品美女久久久久| 国产精品成人久久久| 久久99精品久久久久久动态图| 无码任你躁久久久久久久| 国产日产久久高清欧美一区| 久久99亚洲综合精品首页| 亚洲伊人久久综合中文成人网| 久久99精品久久久大学生| 亚洲国产精品无码久久一区二区 | 成人妇女免费播放久久久| 国内精品人妻无码久久久影院 | 久久福利青草精品资源站免费| 99久久人妻无码精品系列| 国产99久久精品一区二区| 欧美日韩中文字幕久久久不卡 | 亚洲va中文字幕无码久久不卡| 久久不见久久见免费视频7| 亚洲成人精品久久| 99久久99久久精品国产片果冻| 亚洲嫩草影院久久精品| 亚洲精品成人久久久| 一本大道加勒比久久综合| 成人综合伊人五月婷久久| 精品国产99久久久久久麻豆| 久久久精品国产亚洲成人满18免费网站| 亚洲精品tv久久久久久久久| 久久精品无码一区二区三区| 亚洲国产精品18久久久久久| 久久只这里是精品66| 欧美久久综合九色综合| 久久影视国产亚洲| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久亚洲AV永久无码精品| 一级做a爰片久久毛片16| 久久se精品一区精品二区| 精品国产99久久久久久麻豆| 色狠狠久久综合网| 77777亚洲午夜久久多喷| 2021久久精品免费观看| 精品国产99久久久久久麻豆| 久久精品亚洲AV久久久无码|