1. example one :
CREATE PROCEDURE `gift_procedure`()
BEGIN
-- 需要定义接收游标数据的变量
DECLARE a CHAR(16);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 游标
DECLARE cur CURSOR FOR select id from t_app_user where `create_date` >= '2018-01-12' and id < 1342;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO a;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
INSERT INTO t_app_user_gift (remarks, type, app_user_id, gift_id, expire_date, used, del_flag, create_date, update_date)
SELECT '新人注册送券','1',a,id,DATE_ADD(now(), INTERVAL 1 YEAR),'0','0',now(),now() FROM t_gift WHERE id BETWEEN 7 AND 12;
END LOOP;
-- 关闭游标
CLOSE cur;
END
2. 业务描述: 将代理商父表的数据导入到代理商指子表中
CREATE PROCEDURE `t_agent_insert_info`()
COMMENT '代理商网点表的导入'
BEGIN
/* 声明一个变量 用来标记游标是否遍历完 */
DECLARE done int DEFAULT false ;
DECLARE L1 VARCHAR (255) DEFAULT NULL ;
DECLARE L2 VARCHAR (255) DEFAULT NULL ;
DECLARE cur CURSOR FOR SELECT agent_code from t_agent_net_shop ;
/* 游标执行到最后一行 设置done=true */
DECLARE CONTINUE HANDLER for not found set done = true ;
/* 执行查询*/
OPEN CUR ;
/* 遍历游标每一行*/
read_loop: loop
/* 提取游标的数据*/
FETCH cur into L1,L2;
IF done then
LEAVE read_loop ;
end if ;
/* 复制数据到指定的表中*/
INSERT INTO t_agent_net_shop (net_point_name,agent_code)
VALUES (L1,L2 ) ;
END LOOP ;
/* 关闭游标*/
CLOSE CUR ;
END