目录
1、定义
游标是SQL的一种数据访问机制,是一种处理数据的方法。
对查询结果再进行查询,用简单的select语句是无法完成的,游标就是针对这种情况而出现的。
能在结果集中像一个指针一样,让我能对结果集中的每一条记录进行定位,并对指向的记录中的数据进行操作的数据结构
2、使用游标的步骤
- 声明游标
- 打开游标
- 使用游标
- 关闭游标
- 删除游标
//声明游标
declare 游标名 cursor for 查询语句
//打开游标
open 游标名
//使用游标
fetch 游标名 into 变量名
//变量名必须在声明游标之前就定义好
//游标查询结果集中的字段数,必须跟into后面的变量数一致
//关闭游标
close 游标名
//删除游标
deallocate 游标名
案例
创建一个存储过程,实现累加考试成绩最高的几个学员的总分,直到总和对于我们传入的 limit_total_grade的参数值,并且返回累加的人数:total_count;
create procedure proc_cursor(IN limit_total_grade int,OUT total_count int)
begin
#声明相关的变量
declare sum_grade int default 0;#累加的总成绩
declare cursor_grade int default 0;#记录某条成绩
declare score_count int default 0;#记录累加的记录数
#定义游标
declare score_cursor cursor
for
select grade from score order by grade;
#打开游标
open score_cursor;
#使用游标
repeat
fetch score_cursor into cursor_grage;#从游标中获取一条数据
set sum_grade = sum_grade + cursor_grade;#成绩累加
set score_count = score_count + 1;#记录累加的次数
until sum_grade > limit_total_grade#退出条件,成绩总和>传入的limit_total_grade
end repeat;
set total_count = score_count;
#关闭游标
close score_cursor;
end;
drop procedure proc_cursor
#调用存储过程
set @s_count = 0;
call proc_cursor(400,@s_count);
select @s_count;