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维护所有配置线 (责任编辑:IT) |