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
....知道所有的数据都被遍历之后结束。
mysql中存储过程。游标的使用技巧(我的理解)upadate《对一张表中符合条件进行定时的更新操作》
最新推荐文章于 2024-03-25 13:40:15 发布