-- 创建存储过程
CREATE PROCEDURE test()
BEGIN
-- 定义接收游标数据的变量
DECLARE id INT DEFAULT 1;
-- 定义遍历数据的结束标志
DECLARE done INT DEFAULT FALSE;
-- 定义游标及其数据源
DECLARE cur CURSOR FOR SELECT i FROM table1;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据
FETCH cur INTO id;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 循环内想做的事件,如循环插入
INSERT INTO table2 VALUES (id);
-- 结束循环
END LOOP;
-- 关闭游标
CLOSE cur;
--结束存储过程
END
--调用后删除
CALL test();
DROP PROCEDURE IF EXISTS test;
注意:
1、接收游标数据的变量不要定义为与游标数据源的select字段同名
2、变量、游标等注意定义顺序