mysql存储过程游标之loop循环解读

 更新时间:2023年07月06日 10:25:12   作者:不错@  
这篇文章主要介绍了mysql存储过程游标之loop循环解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mysql存储过程游标loop循环

mysql存储过程游标 一共有3中循环方式 while, repeat, loop,

loop

DELIMITER $
CREATE PROCEDURE DAY081002()
BEGIN
#定义参数 后面使用
DECLARE a INT;
DECLARE b INT  DEFAULT 0;
# 定义游标
DECLARE c_cursor CURSOR FOR SELECT shopstoreid FROM shopstore;
OPEN  c_cursor; #开启游标
#定义loop循环 循环名字为 loop_label
loop_label: loop
#将游标中的shopstoreid 这个值给到a
FETCH c_cursor INTO a;
# update执行的条件
IF b <4 THEN
UPDATE shopstore SET storefansnum=74784 WHERE shopstoreid=b;
SET b=b+1;
END IF;
IF b>=7 THEN
LEAVE loop_label;
END IF;
#停止LOOP 循环
END LOOP loop_label;
END $
CALL DAY081002()

在这里插入图片描述

在这里插入图片描述

mysql存储过程游标遍历使用简述

--游标样例:把users中的id为偶数的记录逐一更新用户名
create procedure test11
	begin 
		declare stopflag int default 0 ;
		declare username varchar(32) ;
		--创建一个游标变量,declare变量名cursor...
		declare username_cur cursor for select name from users where id%2=0;
		--游标是保存查询结果的临时区域
		--游标变量username_cur保存了查询的临时结果,实际上就是结果集
		--当变量中保存的结果都查询一遍(遍历),到达结尾,将变量stopflag设置为1,用于循环中判断是否结束
		declare continue handler for not found set stopflag = 1;
		open username_cur ;--打开游标
		fatch username_cur into username ;--游标向前走一步,取出一条记录放在变量 username 中
		while (stopflag = 0) do   --如果游标还没有结尾就继续
			begin 
				--在用户名前拼接'_cur'字段
				update users set name = concat(username,'_cur') where name = username ;
				fetch username_cur into username;
			end;
		end while;		--结束循环
		close username_cur ;		--关闭游标
	end
--游标根据日期区间循环写入数据
create procedure f_rpt_g06
(	in i_begin_date int ,
	in i_end_date int )
begin 
	declare v_oc_date,v_m_begin_date int;
	declare done int default 0;
	-- 游标循环处理输出入参数日期区间的数据
	declare cur cursor for 
		select oc_date from dim_date
			where oc_date between i_begin_date and i_end_date
			order by oc_date asc;
	--将变量done设置为1,用于循环中判断是否交结束
	declare continue hadnler for not found set done = 1;
	--打开游标
	open cur;
	dateloop:loop
	--游标向前走一步,取出一条记录放在变量v_oc_date中
		fetch cur into v_oc_date;
		if done=1 then
			leave dateloop;
		end if;
	--删除表数据
	delete from f_rpt_g06
		where data_dt = v_oc_date
	--插入表数据
	insert into f_rpt_g06
		(字段1,字段2,字段3,字段4)
	select 字段1,字段2,字段3,字段4 from f_rpt_g06_123
	end loop dateloop
	close loop
end 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL Buffer Pool如何提高页的访问速度

    MySQL Buffer Pool如何提高页的访问速度

    本文主要介绍了MySQL Buffer Pool如何提高页的访问速度,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • HeidiSQL工具导出导入MySQL数据

    HeidiSQL工具导出导入MySQL数据

    这篇文章主要为大家详细介绍了HeidiSQL工具导出导入MySQL数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • mysql 中的备份恢复,分区分表,主从复制,读写分离

    mysql 中的备份恢复,分区分表,主从复制,读写分离

    这篇文章主要介绍了mysql 中的备份恢复,分区分表,主从复制,读写分离,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • mysql密码正确无法登陆(host的问题)

    mysql密码正确无法登陆(host的问题)

    本文主要介绍了mysql密码正确无法登陆(host的问题),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • win10下mysql 8.0.11 压缩版安装教程

    win10下mysql 8.0.11 压缩版安装教程

    这篇文章主要为大家详细介绍了win10下mysql 8.0.11 压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • mysql 判断是否为子集的方法步骤

    mysql 判断是否为子集的方法步骤

    这篇文章主要介绍了mysql 判断是否为子集的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • mysql插入重复数据的处理(DUPLICATE、IGNORE、REPLACE)

    mysql插入重复数据的处理(DUPLICATE、IGNORE、REPLACE)

    这篇文章主要介绍了mysql插入重复数据的处理方式(DUPLICATE、IGNORE、REPLACE),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Mysql表的约束超详细讲解

    Mysql表的约束超详细讲解

    MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况
    2022-09-09
  • MYSQL存储过程即常用逻辑知识点总结

    MYSQL存储过程即常用逻辑知识点总结

    在本篇文章里小编给大家整理的是关于MYSQL存储过程即常用逻辑知识点,有需要的朋友们可以学习下。
    2019-08-08
  • MySQL分组查询、排序查询、分页查询以及执行顺序

    MySQL分组查询、排序查询、分页查询以及执行顺序

    MySQL数据查询是数据库操作中最常见的操作之一,它可以帮助我们从数据库中获取所需的数据,下面这篇文章主要给大家介绍了关于MySQL分组查询、排序查询、分页查询以及执行顺序的相关资料,需要的朋友可以参考下
    2024-02-02

最新评论