存储过程

环境设置

查看,设置环境换了
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

测试存储过程

点击上方的“保存”和“运行”,便可以运行存储过程,因为存储过程有入参,所以会弹出输入参数框。输入参数,点击确定,即可运行。
存储过程_第1张图片

事件

使用事件功能,定时运行存储过程。使用前先按照第一步中的内容设置。

编辑

在“call”的后面输入过程名,后面加上参数。

begin
  #call changeScadaDemoRandomly;
	call changeScadaDemoRandomlyProd(10);
end

启动

定时启动,每一秒运行一次存储过程
存储过程_第2张图片

你可能感兴趣的:(后台程序员,#,mysql)