当前位置:   article > 正文

MySQL遍历select语句的查询结果_sql遍历查询结果

sql遍历查询结果

在日常开发中如果遇到如下情况:
需要插入或修改批量数据,但是批量数据是从另一条selec语句中查询出来的结果集

备注:以下代码只适用于必须使用SQL执行的情况,非必要使用SQL时使用mybatis-plus的固有API即可。

废话少说,上代码

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
DROP PROCEDURE IF EXISTS biz_customer_depart;
-- 受MySQL版本影响,可能有些同志执行SQL时会因为分号的原因自动结束语句执行,导师存储过程创建失败,这里建议暂时把SQL语句的结束符由分号
-- 改为双斜杠,在存储过程创建完毕之后在改回分号
delimiter //
-- 创建存储过程
CREATE PROCEDURE biz_customer_depart()
BEGIN
	-- 定义变量
	-- 以下定义的变量是根据博主自己的业务场景定义的,变量名字,变量个数,变量类型可根据需求自定定义
	DECLARE s int DEFAULT 0;
	DECLARE biz_customer_id varchar(32);
	DECLARE biz_customer_userId varchar(32);
	DECLARE biz_customer_departId varchar(32);
	-- 定义游标,并将sql结果集赋值到游标中
	-- 游标中存放的结果集就是我们标题中说的select结果集,结果集的字段有几个,我们上面变量就定义几个
	DECLARE report CURSOR FOR select c.id as id ,c.user_id as userId,u.department_id as departId from biz_customer c left join sys_user u on c.user_id = u.id;
	-- 声明当游标遍历完后将标志变量置成某个值
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
	-- 打开游标
	open report;
		-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
		fetch report into biz_customer_id,biz_customer_userId,biz_customer_departId;
		-- 当s不等于1,也就是未遍历完时,会一直循环
		while s<>1 do
			-- 执行业务逻辑
			update biz_customer set depart_id = biz_customer_departId where id = biz_customer_id and user_id = biz_customer_userId;
			-- 将游标中的值再赋值给变量,供下次循环使用
			fetch report into biz_customer_id,biz_customer_userId,biz_customer_departId;
		-- 当s等于1时表明遍历以完成,退出循环
		end while;
	-- 关闭游标
	close report;
-- 注意:这里的 END // 是结束存储过程的意思,开头我们曾把语句结束符改为了双斜杠
END //
-- 存储过程结束之后在改回默认的分号结束符
delimiter ;
-- 执行存储过程
-- 切记切记 一定要执行存储过程,只有执行了才能生效
call biz_customer_depart();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

注意:
1、受MySQL版本的影响,部分同志会执行失败,一定一定要记得修改语句结束符,把分号改为其他符号,在存储过程定义完成之后在恢复
2、一定注意结果集,也就是select语句的返回结果有几个字段,这个变量就定义几个字段,变量与select返回的字段名不可重名

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/409814
推荐阅读
相关标签
  

闽ICP备14008679号