有一个需求,三张表,role表中找出管理员的role_id,resource表中找出sub_module=‘‘分组’’的source_id,如role_id为1,source_id为7 8 9,则在中间表dpm_common_role_resource中插入1 7,1 8,1 9.
dpm_common_role表,( SELECT role_id FROM dpm_common_role where name = '高级用户' OR name = '管理员';)
dpm_common_resource表,(SELECT source_id FROM dpm_common_resource where sub_module = "分组";)
dpm_common_role_resource表
delimiter //
CREATE PROCEDURE dowhile()
BEGIN
DECLARE FID1 int;
DECLARE FID2 int;
DECLARE done int;
DECLARE ou_cur CURSOR FOR SELECT role_id FROM dpm_common_role where name = '高级用户' OR name = '管理员';
DECLARE ou_cur1 CURSOR FOR SELECT source_id FROM dpm_common_resource where sub_module = "分组";
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN ou_cur;
out_loop:LOOP
FETCH ou_cur INTO FID1;
IF done = 1 THEN
LEAVE out_loop;
END IF;
OPEN ou_cur1;
inner_loop:LOOP
FETCH ou_cur1 INTO FID2;
IF done = 1 THEN
LEAVE inner_loop;
END IF;
INSERT INTO DPM_COMMON_ROLE_RESOURCE (role_id, source_id) values (FID1,FID2);
end LOOP inner_loop;
CLOSE ou_cur1;
SET done=0;
END LOOP out_loop;
CLOSE ou_cur;
END;
//
call dowhile();
前面要加
delimiter //
后面要加
//
写存储过程一定要delimiter 某个标记一下,不然默认情况下mysql遇到分号; 就认为是一个执行标记。
没想到navicat执行存储过程的时候,会默认就自动设置delimiter 为其他符号,修改了;为提交符号了。。。
好大的一个坑啊。
要不提示语法错误。