- 积分
- 29
- UID
- 23648
- 阅读权限
- 10
- 注册时间
- 2016-11-28
- 精华
- 在线时间
- 小时
- 最后登录
- 1970-1-1
- 职业
- 1
|
存储过程的意图:
用游标,对数据库中pri字段计算5行的平均值,并把结果填入当前行的MA5字段中。比如,设当前行为第n行(N>=5),则计算从第(n-4)行到第n行的平均值,并填入第n行的ma5字段中去。
结果:
其他所有行的结果都是正确的,除了最后一行。
请高手帮忙看一下问题出在哪儿?谢谢了!!!
代码如下:
DELIMITER $$
USE `sharestool`$$
DROP PROCEDURE IF EXISTS `getMA`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getMA`()
BEGIN
DECLARE done INT DEFAULT 0;
##DECLARE myid SMALLINT DEFAULT 1; /*存放上次fetch提取出来的ShareslistID字段值,与光标取出的相应值对比,判断是否进入新股票的数据流处理流程*/
DECLARE sum5 DECIMAL(11,3) DEFAULT 0;
DECLARE mycount SMALLINT DEFAULT 0; /*光标处理的次数*/
DECLARE cur_pri DECIMAL(11,2) DEFAULT 0; /*光标取出的close字段值*/
DECLARE cur_id INT DEFAULT 1; /*光标取出的id字段值*/
DECLARE cur CURSOR FOR SELECT `id`,`pri` FROM `result`; /*定义光标*/
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO cur_id,cur_pri;
SET sum5=sum5 + cur_pri;
SET mycount=mycount+1;
IF mycount> 5 THEN
SET sum5=sum5-(SELECT `pri` FROM `result` WHERE `id`=cur_id-5);
UPDATE `result` SET `MA5`=sum5/5 WHERE `id`=cur_id;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END$$
|
|