参考参考
参考
代码的问题改成如下代码即可解决
应该先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