mysql中存储过程。游标的使用技巧(我的理解)upadate《对一张表中符合条件进行定时的更新操作》

DELIMITER $$

USE `gps_hisdata`$$

DROP PROCEDURE IF EXISTS `update_alarm_info`$$
/*删除存储过程,如果存在存储过程:update_alarm_info*/

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_alarm_info`()
/*创建存储过程:update_alarm_info*/

BEGIN
DECLARE temNumber INT DEFAULT 0;
DECLARE TempID INT;
DECLARE SUM INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
/*声明4个变量*/

DECLARE UpdateDataCursor CURSOR FOR SELECT dir.id FROM alarm dir INNER JOIN alarm dirTemp ON dirTemp.id = dir.id WHERE dir.alarmType='GpsOnline';
/*声明1个游标,将符合条件的数据的id放入到游标里面*/

OPEN UpdateDataCursor;
/*打开游标*/

SELECT COUNT(1) INTO SUM FROM alarm;
/*查询出来alarm表中数据量的总和,赋值给sum*/

WHILE i<SUM DO
/*while循环:目的是将alarm表中的所有数据进行遍历*/

	FETCH UpdateDataCursor INTO TempID;
/*fetch 游标  into  TempID 取出游标中的第一个id赋值给TempID,然后执行下面的update语句,

:如果下面的id与游标中的id相等,就会执行下面的更新语句*/
	UPDATE alarm SET processed ='13',
        
        processedTime =DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 6 HOUR),'%Y-%m-%d %H:%i:%s'),
        
        processedUserName='平台管理员',
        
        remark='已处理' WHERE id=TempID;
        
	SET i=i+1;
      
END WHILE;
CLOSE UpdateDataCursor;
    END$$

DELIMITER ;

总结一下:
(1)声明变量,声明游标(游标在我的理解中:就是将符合条件的id类似于《java中的集合》
        里面存储都是符合条件的id)
(2)打开游标《游标需要打开才能使用》
(3)查询出操作表中的总数据量(下面需要使用)
  (4)  遍历这张表中的所有数据,符合条件的进行数据的更新。
特别强调:fetch      游标   into TempID      我的理解:
第一次执行。游标将第一个满足条件的id赋值给TempID
第二次执行。游标将第二个满足条件的id赋值给TempID
....知道所有的数据都被遍历之后结束。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值