mysql利用存储结构循环插入数据方法

109 阅读1分钟

问题:需要将查询到的数据进行循环插入另外的表中。
原理:利用存储过程可以解决。
例子说明:

drop procedure if exists proc_tmp;
delimiter $$
create procedure proc_tmp()
begin
	#声明一个开关变量flag用于循环结束判断默
    declare done  INT default FALSE;
    #用于存储结果集的记录(因为我这里结果集的记录只有一列且为int类型)
  	declare operatorId int(11);
		#申明一个游标
		declare idCur  cursor for(
						SELECT
							a.id
						FROM
							user_info a
						LEFT JOIN test_info b ON a.id= b.id
						WHERE
							a.`STATUS` = 1
						AND b.`STATUS` = 1
          );
    #设置循环结束标识done值怎么改变 的逻辑
		declare continue handler for not found set done = TRUE;

		#打开游标
		open idCur;
    #循环开始 
		repeat
				#把游标的内容赋值到变量中。
				fetch idCur into operatorId;
				#数值为非0,MySQL认为是true
				if not done THEN  
        #84 菜单id
				INSERT INTO use_menu(USER,menu)VALUES(operatorId,55);
				end if;
				until done end repeat;
		#关闭游标
		close idCur;
end $$

call proc_tmp();
#删除临时存储过程
drop procedure proc_tmp;