游标是用来存储查询结果集的数据类型,在存储过程和存储函数中可以使用游标对结果集进行循环处理,游标的使用包括游标声明、open、fetch和close,语法如下:
声明光标:
DECLARE 游标名称 CURSOR FOR 封装select语句;
开启游标(open):
OPEN 游标名称;
获取游标中的数据(fetch)
FETCH 游标名称 INTO var_name
关闭游标(close):
close 游标名称;
BEGIN
-- 声明保存数据的变量
DECLARE class_id int(10);
DECLARE class_name VARCHAR(10);
-- 声明一个名字为 cursor_result 游标
-- 游标值为class_info表中数据
DECLARE cursor_result CURSOR FOR select * from class_info;
-- 打开游标
OPEN cursor_result;
-- 遍历值放入变量中
FETCH cursor_result INTO class_id,class_name;
-- 查看结果
SELECT CONCAT('class_id=',class_id,'class_name=',class_name);
-- 遍历值放入变量中
FETCH cursor_result INTO class_id,class_name;
-- 查看结果
SELECT CONCAT('class_id=',class_id,'class_name=',class_name);
-- 关闭游标
CLOSE cursor_result;
END
循环读取游标示例:
BEGIN
-- 声明保存数据的变量
DECLARE c_id int(10);
DECLARE c_name VARCHAR(10);
-- 声明记录总记录数的变量
DECLARE count_class_info INT(10) DEFAULT 1;
-- 声明一个名字为 cursor_result 游标
-- 游标值为class_info表中数据
DECLARE cursor_result CURSOR FOR select * from class_info;
-- 设置值,如果抓取不到数据给count_class_info设置为0
DECLARE EXIT HANDLER FOR NOT FOUND SET count_class_info=0;
-- 打开游标
OPEN cursor_result;
WHILE count_class_info<>0 DO
-- 遍历值放入变量中
FETCH cursor_result INTO c_id,c_name;
-- 查看结果
SELECT CONCAT('class_id=',c_id,'class_name=',c_name);
END WHILE;
-- 关闭游标
CLOSE cursor_result;
END