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维护所有配置线

没有更多推荐了,返回首页