mysql 必知必会 游标_MySql必知必会实战练习(六)游标

游标主要用于交互式应用,滚动屏幕上的数据,并对数据进行浏览或做出更改

看一下下面的例子:

drop procedure IF EXISTS processorders;

create procedure processorders(out ordernum int)

beginselect order_num fromorders into ordernum;

end;

call processorders(@ordernum);select ordernum;

输出:

bd049628cab49d31308b49fe28cf301e.png

由于结果为多行无法显示,这时我们就需要使用游标来操作

1. 游标基本方法

(1)创建游标

create procedure processorders()

begin

declare ordernums cursorfor select order_num fromorders;

end;

(2)打开游标

open ordernums;

(3)关闭游标

close ordernums;

在一个游标关闭后,如果没有重新打开,则不能使用它。

使用申明过的游标不需要再次声明,用open语句打开它就可以了。

2.游标使用示例

drop procedure IF EXISTS processorders;

create procedure processorders(out numbers int,out custid int)

begin

#声明游标

declare ordernums cursorfor

select order_num,cust_id fromorders;

#打开游标

open ordernums;

#用来检索当前行的order_num(自动从第一行开始)

fetch ordernums into numbers, custid;

#关闭游标

close ordernums;

end;

call processorders(@numbers,@custid);select @numbers,@custid;

会看到只输出了第一行的order_num和cust_id:

d651491008d8928cee1c0b79303518ff.png

继续,接下来将循环检索数据,从第一行到最后一行:

drop procedure IF EXISTS processorders;

create procedure processorders(out numbers int,out custid int)

begin

declare done booleandefault 0;

#声明游标

declare ordernums cursorfor

select order_num,cust_id fromorders;

#声明CONTINUE HANDLER

declare CONTINUE HANDLER FOR SQLSTATE'02000' SET done = 1;

#打开游标

open ordernums;

#开始循环

REPEAT

#用来检索当前行的order_num(自动从第一行开始)

fetch ordernums into numbers, custid;

#.....这里可以对每次检索出来的数据进行处理

#结束循环

UNTIL done END REPEAT;

#关闭游标

close ordernums;

end;

call processorders(@numbers,@custid);select @numbers,@custid;

我们会看出输出最后一行的order_num和cust_id

98ab9c2bd4cd393a270d991d416aa56d.png

这样就实现了数据的循环检索,我们可以在 (#.....这里可以对每次检索出来的数据进行处理)注释处对每次检索出来的数据进行处理

注意:上面我们定义了一个COUNtINUE HANDLEr,它是在条件出现时执行的代码,它指出SQLSTATE '02000'出现时set done = 1,最开始SQLSTATE '02000'是一个未找到的条件,只有当repeat没有更多的行供循环时才会出现SQLSTATE '02000'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值