背景
加了新的业务需求导致要给之前的每一位用户做一些初始化数据
业务:根据每个人的权限,给每个人初始化十二条快捷入口的数据
工具
navicat
后面需不需要参数什么的不说了,我这次的都不需要,反正可以有参数和返回
sql
CREATE DEFINER=`root`@`%` PROCEDURE `quick_entry`()
BEGIN
DECLARE end_flag int DEFAULT 0;
DECLARE i int DEFAULT 0;
DECLARE userId bigint;
##查出我要循环的数据
DECLARE sys_user CURSOR FOR SELECT id from sys_user;
##定义循环结束标志
DECLARE CONTINUE HANDLER FOR NOT FOUND SET end_flag=1;
OPEN sys_user;
##讲值赋值到变量中开始循环
FETCH sys_user INTO userId;
while end_flag<>1 do
INSERT INTO user_resource_quick_entry (id,tenant_id,user_id,resources_id)
##(@i:=@i+1)id (select @i:=i) s:查询的结果集多加一列序号列,当作我插入新表时的主键
SELECT (@i:=@i+1)id,u.tenant_id,u.id user_id,rb.id resources_id FROM sys_user u left JOIN sys_user_role ur on ur.user_id=u.id
left JOIN sys_role_resources rr on rr.role_id=ur.role_id
LEFT JOIN sys_resources r on r.id=rr.resources_id
LEFT JOIN sys_resources rb on rb.parent_id=r.id,(select @i:=i) s
WHERE rb.quick_entry_flag=1
#使用循环的数据
and u.id=userId
LIMIT 0,12;
SET i=i+12;
FETCH sys_user INTO userId;
end while;
close sys_user;
END
简单记录,拜拜