mysql用游标更新数据总是多更新一次

参考参考
参考
代码的问题改成如下代码即可解决
应该先fetch 进入循环 赋值 再fetch 循环
string a,b
DECLARE aa CURSOR FOR
SELECT “VENDOR”.“VEND_NUM”,
“VENDOR”.“VEND_NAME”
FROM “VENDOR” ;
open aa;
fetch aa into :a,:b;
do while sqlca.sqlcode=0
messagebox(a,b) //messagebox()總是比我表裏的數據行數多一次
fetch aa into :a,:b;
//3行紀錄要message 4次
loop
close aa;

是因为fetch myCursor into g; 需要在循环外再来一次
下面是完整代码

BEGIN
declare g VARCHAR(1000);  
    declare tmp1 VARCHAR(1000);  
declare shuliang INT(100);#销售表订单配件数
declare xsbdh INT(100);#销售表订单标号
declare kucun INT(100);#库存表库存数量
declare shengyu int(100);#剩余库存
    declare done int default -1;  -- 用于控制循环是否结束  
        
    /* 声明游标 */    
    declare myCursor cursor for select torderby from `销售订单` ORDER BY torderby desc;#从最高优先值开始
        
    /* 当游标到达尾部时,mysql自动设置done=1 */       
    declare continue handler for not found set done=1;    
       
    /* 打开游标 */    
    open myCursor;    
      **fetch myCursor into g;**  
    /* 循环开始 */    
    myLoop: LOOP    
          **fetch myCursor into g;**  
        /* 移动游标并赋值 */    
       
/* fetch myCursor into g;    
          select partsaleno from `销售订单`  where torderby= g limit 1 into shuliang;#查询销售表中torderby从高到低的配件销售数量
         #select partno from `销售订单`  where torderby= g into xsbdh;
          select partlockno from `库存表`  where partno= xsbdh limit 1 into kucun;
           #if shuliang<kucun THEN
         
   #    UPDATE `库存表` set partlockno=kucun-shuliang where partno=g;
              select partlockno from `库存表` where partno=g limit 1 into shengyu;
  */          #end if;
       
          select partsaleno from `销售订单`  where torderby= g limit 1 into shuliang;#查询销售表中torderby从高到低的配件销售数量
         select partno from `销售订单`  where torderby= g limit 1 into xsbdh;
          select partlockno from `库存表`  where partno= xsbdh limit 1 into kucun;
           #if shuliang<kucun THEN
             UPDATE `库存表` set partlockno=kucun-shuliang where partno=xsbdh;
              select partlockno from `库存表` where partno=xsbdh into shengyu;        
                -- 游标到达尾部,退出循环  
       if done=1 then   
        leave myLoop;    
        end if;    
            
        /* do something */    
        -- 循环输出信息  
            #  select g;
                
               select shuliang;
                -- 可以加入insert,update等语句  
        
    /* 循环结束 */    
    end loop myLoop;    
        
    /* 关闭游标 */    
    close myCursor;    
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值