-- 游标(cursor)是一个存储在MySQL服务器上的数据库查询,
-- 它不是一条SELECT语句,而是被该语句检索出来的结果集。
-- 游标:用于存储查询结果集的数据类型
-- 声明游标:
-- DECLARE 游标名称 CURSOR FOR 查询语句;
-- 声明变量:
-- DECLARE 变量名 数据类型;
-- 打开关闭游标:
-- open 游标名称; close 游标名称;
-- 获取游标记录:
-- FETCH 游标名称 INTO 变量名;
-- DECLARE:声明,定义
-- CURSOR:游标
-- FETCH:取出,检索
-- 创建存储过程
CREATE PROCEDURE sp1()
BEGIN
-- 声明变量
DECLARE a INT(11);
-- sql语句;
-- 1.声明游标 查询students表中的age
DECLARE s_age CURSOR FOR SELECT age FROM students;
-- 2打开游标
OPEN s_age;
-- 3检索游标数据并赋值给变量a
FETCH s_age INTO a;
-- 4关闭游标
CLOSE s_age;
END;
-- 调用存储过程
CALL sp1();
-- 创建存储过程,查询students表中age,创建游标,把查询到的结果数据,插入到新表mystudents里面
CREATE PROCEDURE stu_age2()
BEGIN
DECLARE s_age INT ;
DECLARE stu_age CURSOR -- 定义和命名游标
FOR SELECT age FROM students;
-- 当出现报错码02000关闭游标 声明条件处理程序
DECLARE EXIT HANDLER FOR NOT FOUND CLOSE stu_age;
CREATE TABLE IF NOT EXISTS mystudents -- 建表
(id int primary key auto_increment , new_age INT);
OPEN stu_age;
WHILE TRUE DO
FETCH stu_age INTO s_age;
INSERT INTO mystudents(id,new_age) VALUES(NULL,s_age);
END WHILE;
END;
CALL stu_age2(); -- 执行存储过程
SELECT * FROM mystudents;