mysql游标

    CREATE PROCEDURE update_pointer()  
    BEGIN  
        /* 定义变量一 */  
        DECLARE  total FLOAT;  
        DECLARE  uid INT;  
        DECLARE  _done INT DEFAULT 0;  
        DECLARE currentP INT DEFAULT 0;  
        DECLARE firstid INT;  
        DECLARE secondid INT;  
        DECLARE parentId VARCHAR(16);  
        DECLARE first_jj_yy INT DEFAULT 0;#第一程基建燃油费  
        DECLARE second_jj_ry INT DEFAULT 0;#第二程基建燃油费  
        /* 定义光标 */  
        DECLARE _Cur CURSOR FOR  
                SELECT aliTotal,ordUID,flightId,backFliId FROM fightorder WHERE ordState=4;#主订单查询  
        DECLARE _CurRex CURSOR FOR  
            SELECT oeactTotal,ordId FROM flight_orderex WHERE oeState=4;  
          
          
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done = 1;#错误定义,标记循环结束  
          
        /* 打开光标 */  
        OPEN _Cur;  
             /* 循环执行 */  
             REPEAT  
                FETCH _Cur INTO total, uid, firstid, secondid;  
                IF NOT _done THEN  
                    IF total>0 AND uid>0 THEN  
                        SELECT fcn+fyq INTO first_jj_yy FROM flightlist WHERE flightId=firstid LIMIT 1;  
                        IF secondid>0 THEN  
                            SELECT fcn+fyq INTO second_jj_ry FROM flightlist WHERE flightId=firstid LIMIT 1;  
                        END IF;  
                        UPDATE sysusers SET integral=(integral+total)-(second_jj_ry+first_jj_yy) WHERE sysusers.UID=uid;  
                    END IF;  
                END IF;  
             UNTIL _done END REPEAT; #当_done=1时退出被循  
        /*关闭光标*/  
        CLOSE _Cur;  
        SET _done = 0;#只有定义为0,新的循环才能继续。  
        OPEN _CurRex;  
        REPEAT  
            FETCH _CurRex INTO total,parentId;  
            IF NOT _done THEN  
                #IF total > 0 THEN  
                    SELECT ordUID INTO uid FROM fightorder WHERE fightorder.alipayNo=parentId LIMIT 1;#查询用户UID  
                    #INSERT INTO test values(total,uid);  
                    UPDATE sysusers SET integral=integral+total WHERE sysusers.UID=uid;#新增积分  
                #END IF;  
            END IF;  
        UNTIL _done END REPEAT;  
        CLOSE _CurRex;  

    END 



1  BEGIN
 2      DECLARE Done INT DEFAULT 0;
 3     
 4      DECLARE CurrentLingQi INT;
 5     
 6      DECLARE ShizuName VARCHAR(30);
 7      /* 声明游标 */
 8      DECLARE rs CURSOR FOR SELECT NodeName, LingQi FROM socialrelation;
 9      /* 异常处理 */
10      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
11     
12      /* 打开游标 */
13      OPEN rs;  
14     
15      /* 逐个取出当前记录LingQi字段的值,需要进行最大值的判断 */
16      FETCH NEXT FROM rs INTO ShizuName, CurrentLingQi;     
17      /* 遍历数据表 */
18      REPEAT
19            IF NOT Done THEN
20               SET CurrentLingQi = CurrentLingQi + 60;
21               /* 如果更新后灵气值大于允许的最大值,则就设置为最大值 */
22               IF CurrentLingQi >= 1800 THEN
23                  UPDATE socialrelation SET LingQi = 1800 WHERE NodeName = ShizuName;
24               ELSE
25               /* 否则,正常更新 */
26                  UPDATE socialrelation SET LingQi = LingQi + 60 WHERE NodeName = ShizuName;
27               END IF;
28            END IF;
29           
30      FETCH NEXT FROM rs INTO ShizuName, CurrentLingQi;
31
32      UNTIL Done END REPEAT;
33     
34      /* 关闭游标 */
35      CLOSE rs;
36 END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值