MySQL游标的概念及其使用

MySQL游标

游标的概念

游标是一种对从表中检索出的数据进行操作的灵活手段, 就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.
游标总是与一条sql选择语句相关联,因为游标由结果集和结果集中指向特定记录的游标位置组成.

游标的使用

游标的使用可以概括为声明游标、打开游标、从游标中提取数据、关闭游标.

  • 声明游标
    declare 游标名 cursor for select 语句;
    此时select语句并未执行.

  • 打开游标
    open 游标名;
    此时select语句将被执行.

  • 从游标中提取数据
    fetch 游标名 into 变量名1, 变量名2, ...;
    变量名的个数必须与声明游标时使用的select语句结果集中的字段个数保持一致.
    每次fetch语句从结果集中提取一条记录,当使用fetch语句从游标中提取最后一条记录后,再次执行fetch语句时,将产生"ERROR 1327(02000): NO DATA TO FETCH"错误信息,开发人员可以针对MySQL错误代码1327自定义错误处理程序(游标错误处理程序应该放在声明游标语句之后).

  • 关闭游标
    close 游标名;

例子:

delimiter $$

create procedure update_cursor_score_proc(IN c_no int)
modifies sql data
begin

declare s_no int;
declare grade int;
declare state char(20);
-- 声明游标
declare score_cursor cursor for select 学号, 成绩 from choose where 课程号 = c_no;
-- 声明错误处理程序
declare continue handler for 1327 set state = 'ERROR';

-- 打开游标
open score_cursor;

-- 在repeat循环中使用fetch提取记录
repeat

fetch score_cursor into s_no, grade;
set grade = grade + 5;
if(grade > 70) then set grade = 70; end if;
if(grade >= 55 && grade <= 57) then set grade = 60; end if;
update choose set 成绩 = grade where 学号 = s_no and 课程号 = c_no;

until state = 'ERROR' end repeat;

close score_cursor;
end;$$

delimiter ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_BryceLoski21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值