环境设置
查看,设置环境换了
show variables like ‘%sch%’
set global event_scheduler =1;
存储过程
编辑
功能,定时修改scada_demo中 部分设备的状态值。
CREATE DEFINER=`root`@`localhost` PROCEDURE `changeScadaDemoRandomlyProd`()
BEGIN
#Routine body #Routine body goes here...
#Routine body goes here...
DECLARE i int DEFAULT 0;
DECLARE v int DEFAULT 0;
DECLARE limitt int DEFAULT 0;
DECLARE lim int DEFAULT 0;
DECLARE loop_num int DEFAULT 10;
declare my_index int default 0;
select count(*) into i from scada_demo;
while my_index<=loop_num do
set lim = floor(RAND()*i);
set v= floor (1+RAND()*3);
select device_id into limitt from scada_demo limit lim,1;
select lim;
UPDATE scada_demo set statue_value = v WHERE device_id = limitt;
set my_index = my_index+1;
end while;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `changeScadaDemoRandomlyProd`(in loop_num int)
BEGIN
#Routine body #Routine body goes here...
#Routine body goes here...
DECLARE count int DEFAULT 0;
# 待修改的值
DECLARE v int DEFAULT 0;
# 一次循环中的device_id
DECLARE my_device_id int DEFAULT 0;
# 偏移量
DECLARE lim int DEFAULT 0;
# 循环指针
declare my_index int default 0;
# 动态获取 当前表格的最大行数
select count(*) into count from scada_demo;
while my_index<=loop_num do
# 随机获取某一行
set lim = floor(RAND()*count);
set v= floor (1+RAND()*3);
select device_id into my_device_id from scada_demo limit lim,1;
# 通过控制台查看结果
select lim;
UPDATE scada_demo set statue_value = v WHERE device_id = my_device_id;
set my_index = my_index+1;
end while;
END
测试存储过程
点击上方的“保存”和“运行”,便可以运行存储过程,因为存储过程有入参,所以会弹出输入参数框。输入参数,点击确定,即可运行。
事件
使用事件功能,定时运行存储过程。使用前先按照第一步中的内容设置。
编辑
在“call”的后面输入过程名,后面加上参数。
begin
#call changeScadaDemoRandomly;
call changeScadaDemoRandomlyProd(10);
end
启动
定时启动,每一秒运行一次存储过程