mysql 游标

BEGIN  


DECLARE Done INT DEFAULT 0;


DECLARE result varchar(16);


DECLARE sqlr varchar(2048);


Declare rs Cursor for SELECT stations.DTU FROM `stations` WHERE `Status`>0;


DECLARE CONTINUE HANDLER FOR NOT FOUND SET Done = 1;


Open rs;


REPEAT


Fetch Next From rs Into result;



INSERT INTO `xxxxxxxxx`.`xxxxx` (`dtuid`, `date_time`, `xxxxxxxxx`, `xxxxx`, `xxxxxxx`, `xxxxx`, `xxxxx`, `xxxx`, `xxxxx`, `xxx`, `v_outxxxxx_2`, `xxxx`, `xxxxxx`, `a_run_3`, `v_out_3`, `tem_3`, `speed_4`, `a_run_4`, `v_out_4`, `tem_4`, `all_v`, `all_a`, `all_active_power`, `all_reactive_power`, `all_apparent_power`, `pumg_station_tem`, `pumg_station_hum`, `bearing_tem_front_1`, `bearing_tem__back_1`, `coil_tem_1`, `bearing_tem_front_2`, `bearing_tem__back_2`, `coil_tem_2`, `bearing_tem_front_3`, `bearing_tem__back_3`, `coil_tem_3`, `bearing_tem_front_4`, `bearing_tem__back_4`, `coil_tem_4`, `ph`, `chlorine`, `turbidity`, `all_power`, `month_power`, `int_flow`, `oud_flow`) VALUES (result, DATE_FORMAT(now(),'%Y-%m-%d'), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);


set sqlr=CONCAT("UPDATE `xxxxxxx`.`xxxxxx` SET `xxxxx`=(SELECT avg(xxxx) as int_water_press FROM xxxx",xxxx," where xxxxxx LIKE '",DATE_FORMAT(now(),'%Y-%m-%d'),"%' and xxxxxx<>-9999 and int_water_press<>9999 ) where xxxxxxx like '",DATE_FORMAT(now(),'%Y-%m-%d'),"%' and xxxxxx= ",result);


set @sqlr=sqlr;  
prepare stmt from @sqlr; 
execute stmt;
deallocate prepare stmt;


UNTIL Done  


END REPEAT;






END



BEGIN  


DECLARE Done INT DEFAULT 0;




DECLARE result VARCHAR (16);




DECLARE sqlr VARCHAR (2048);
DECLARE sqlre VARCHAR (2048);




DECLARE rs CURSOR FOR SELECT
stations.DTU
FROM
`stations`
WHERE
`Status` > 0;




DECLARE CONTINUE HANDLER FOR NOT FOUND
SET Done = 1;


OPEN rs;




REPEAT
FETCH Next
FROM
rs INTO result;


SET sqlr = CONCAT(
"select",@pumg_run_time_1,":=pumg_run_time_1,",@pumg_run_time_2,":=pumg_run_time_2,",@pumg_run_time_3,":=pumg_run_time_3,",@pumg_run_time_4,":=pumg_run_time_4 from wd",result," where date_time like '",DATE_FORMAT(now(),'%Y-%m-%d'),"%' order by date_time limit 1;"
"select",@pumg_run_time_1e,":=pumg_run_time_1,",@pumg_run_time_2e,":=pumg_run_time_2,",@pumg_run_time_3e,":=pumg_run_time_3,",@pumg_run_time_4e,":=pumg_run_time_4 from wd",result," where date_time like '",DATE_FORMAT(now(),'%Y-%m-%d'),"%' order by date_time desc limit 1;"
);







mysql 游标最后一行 重复问题

  (2012-02-20 11:53:02)
标签: 

杂谈

 
 
BEGIN
declare p_id INT;
declare p_Code INT default 0;
declare p_Logo INT default 0;
declare p_Name varchar(255) default '';
declare p_Address varchar(755) default '';
declare p_Phone varchar(755) default '';
declare p_Logo2 varchar(755) default '';
declare p_Logo3 varchar(755) default '';
declare p_Paid varchar(755) default '';
declare p_IsDelete varchar(755) default '';
declare done INT DEFAULT 0;
declare cur CURSOR FOR SELECT ID, Code,Logo,Name,Address,Phone,Logo2,Logo3,Paid,IsDelete   FROM hospital_copy;
declare CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur;
REPEAT
FETCH cur INTO p_id, p_Code,p_Logo,p_Name,p_Address,p_Phone,p_Logo2,p_Logo3,p_Paid,p_IsDelete;
IF done=0 THEN
INSERT INTO `hospital` (
`ID` ,
`Code` ,
`Name` ,
`Country_Code` ,
`Phone` ,
`Address1` ,
`Address2` ,
`Address3` ,
`County` ,
`Country` ,
`Postcode` ,
`Logo` ,
`Logo2` ,
`Logo3` ,
`Paid` ,
`IsDeleted`,
`Add_time`,
`Delete_time`,
`timeInterval`
)
VALUES (
p_id, p_Code,p_Name,'0001','13971056776',p_Address,p_Address, p_Address, p_Address, p_Address, '442200', p_Logo,p_Logo2,p_Logo3,p_Paid,p_IsDelete,'2011-1-1','','30');
END IF;
UNTIL done=1
END REPEAT;
CLOSE cur;
END

加深红色部分解决方法,最后的重复的原因是 FETCH cur INTO ……;的时候,当第一次到达最后一条记录时,取出记录,把值给变量,这时一切正常,没有错误。然后UNTIL  UNTIL done=1 循环到REPEAT重新开始,再FETCH一条时,已经没有记录,done会被 SET done=1;,但此刻没有进行任何判断,程序会继续执行 INSERT INTO ……语句,而由于FETCH没有取到记录,则没有对变量进行赋值,所以变量仍是原值。当到UNTIL  done 时程序退出REPEAT,从而最后的记录会被重复。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值