游标可用于接收查询语句的结果集,并遍历结果集获取每条记录进行处理
drop procedure if exists student_pro;
CREATE PROCEDURE student_pro()
BEGIN
-- 定义接收变量
DECLARE nam varchar(20);
DECLARE ag int;
DECLARE sid int;
DECLARE done int;
-- 创建游标接收结果集
DECLARE all_data CURSOR FOR
SELECT id,`name`,`age` FROM `student_1` limit 100;
-- 当取不到值时对变量done进行赋值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
-- 打开游标
OPEN all_data;
-- 开始循环
data_loop:LOOP
-- 获取当前行记录并赋值给变量
FETCH all_data INTO sid,nam,ag;
IF done=1 THEN
-- 跳出循环
LEAVE data_loop;
END IF;
-- 执行业务逻辑
INSERT INTO test(id,`name`,`age`) VALUES(sid,nam,ag);
-- 结束循环
END LOOP data_loop;
-- 关闭游标
CLOSE all_data;
END;
-- 调用存储过程
CALL student_pro;