存储过程 游标嵌套

有一个需求,三张表,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 为其他符号,修改了;为提交符号了。。。


好大的一个坑啊。

要不提示语法错误。

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值