mysql 存储过程+游标完成批处理

mysql 存储过程+游标完成批处理

1.案例介绍

本例作用:配置线入参为空,则将当前用户维护所有配置线关系。配置线入参非空,则维护当前用户配置线关系。

2.创建存储过程

DELIMITER $$  -- 自定义结束符
  drop procedure if exists insert_user_branch_ralation; -- 删除已有的存储过程
  CREATE PROCEDURE insert_user_branch_ralation(in cmuPid int,in branchId int)  -- 创建存储过程 两个入参 用户ID和配置线ID
    BEGIN
			declare s int DEFAULT 0;  -- 声明四个变量
			declare cmbPid int;  -- 配置线ID
			declare braCode varchar(15);  -- 配置线码值(本例中没有用到)
			declare braName varchar(15);-- 配置线名称(本例中没有用到)
			declare branch cursor for select a.cmb_pid,a.sub_branch_code,a.sub_branch_name from cgp_mng_branch a ; -- 创建游标并将查询结果放入branch游标中
			declare continue handler for sqlstate '02000' set s=1;  -- 如果游标中没有值了 则将变量s设置为1

			if branchId is not null then  -- 入参为空则先删后增
				DELETE from cgp_mng_userbra where cmu_pid = cmuPid and cmb_pid = branchId;
				insert into cgp_mng_userbra(cmu_pid,cmb_pid,createdBy,createdTime,validity) values(cmuPid,branchId,'admin',NOW(),'1');
			else  -- 入参为空 则删除当前用户所有配置线 在维护上所有配置线
				DELETE from cgp_mng_userbra where cmu_pid = cmuPid;
				
				open branch; -- 打开游标
				
				fetch branch into cmbPid,braCode,braName; -- 将游标中的值取出来放到上边声明的变量里边 
				while s<>1 do     -- 如果s不等于1 就执行循环
					insert into cgp_mng_userbra(cmu_pid,cmb_pid,createdBy,createdTime,validity) values(cmuPid,cmbPid,'admin',NOW(),'1');
					FETCH branch into cmbPid,braCode,braName; -- 再在循环中将游标中的值传入到变量中
				end while ;
				-- 关闭游标
				close branch;
			end if;
    END
    $$
DELIMITER ;  -- 将结束符还原为分号

3.调用存储过程

call insert_user_branch_ralation(3,1);  -- 给用户3维护1配置线
call insert_user_branch_ralation(2,null); -- 给用户2维护所有配置线
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值