1.定义
1)游标是一组类似于数组的具有排序的结果集。
2)在mysql中游标只能用于存储过程和函数。
3)mysql的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录。
2.声明游标
DECLARE [name] CURSOR FOR [select sql];
3.具体实例
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_02`(IN `id` int)
BEGIN
#游标
# 1)游标是一组类似于数组的具有排序的结果集。
# 2)在mysql中游标只能用于存储过程和函数。
#3)mysql的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录。
declare p_id int;
declare p_name varchar(55);
#声明变量控制遍历游标的循环终止
declare curstatus int default 1;
#声明游标,必须在所有执行sql(select/insert/update/delete)之前声明游标
declare list cursor for select id,stu_name from stu_info
where cla_id=id;
# CONTINUE HANDLER 声明handler(处理器),handler会自动地向下读取游标的一行数据
# 当handler读不到数据时(not found)表明已经读完了游标的数据
# 此时设置curStatus = 0
declare continue handler for sqlstate '02000' set curstatus=0;
#开启游标
open list;
# 向下读取一行数据,并将这行数据赋值给与其字段对应的变量
fetch list into p_id,p_name;
while curstatus=1 do
# 执行sql语句
# select/insert/update/delete...
insert into person_info set name=p_name;
fetch list into p_id,p_name;
end while;
# 关闭游标
CLOSE list;
END
调用
call p_02(2)