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

  看一下下面的例子:

drop procedure IF EXISTS processorders;
create procedure processorders(
out ordernum int
)
begin
select order_num from orders into ordernum;
end; call processorders(@ordernum);
select ordernum;

  输出:

  

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

1. 游标基本方法

(1)创建游标

create procedure processorders()
begin
declare ordernums cursor
for
select order_num from orders;
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 cursor
for
select order_num,cust_id from orders; #打开游标
open ordernums; #用来检索当前行的order_num(自动从第一行开始)
fetch ordernums into numbers, custid; #关闭游标
close ordernums;
end; call processorders(@numbers,@custid);
select @numbers,@custid;

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

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

drop procedure IF EXISTS processorders;
create procedure processorders(
out numbers int,
out custid int
)
begin
declare done boolean default 0;
#声明游标
declare ordernums cursor
for
select order_num,cust_id from orders; #声明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

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

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

MySql必知必会实战练习(六)游标的更多相关文章

  1. MySql必知必会实战练习(二)数据检索

    在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...

  2. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  3. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  4. mysql必知必会——GROUP BY和HAVING

    mysql必知必会——GROUP BY和HAVING 创建表结构 create table `employ_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...

  5. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  6. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  7. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  8. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

  9. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  10. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

随机推荐

  1. SSO 单点登录的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  2. vue-scroller的使用

    一 安装 使用npm 安装 npm install vue-scroller -S 二 引入 https://www.jianshu.com/p/a39f5276ff0b https://www.np ...

  3. windows 下android react native详细安装配置过程

    写在前面: 在网上搜了很多安装配置文档,感觉没有一个真的跟我安装的过程一模一样的,东拼拼西凑凑,总算是装好了,我不会告诉你,断断续续,我花了两天时间...一到黑屏报错就傻眼,幸好在react群里遇到了 ...

  4. NOIP 货车运输

    题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过 ...

  5. COS-7设备管理

    操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行.   操作系 ...

  6. git多站点帐号配置

    事件场景 小明同学是一个非常努力的coder,业余时间都花在了github.com上面,因为公司的台式机性能比较好,小明同学想在公司电脑上面也进行开发.但是github上面的帐号邮箱跟公司分配的帐号邮 ...

  7. maven项目包结构

    groupId填写公司名称,如com.enn.ennewartifactId填写项目名称webapps如父工程: <groupId>com.enn.ennew</groupId> ...

  8. 解决com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes异常

    错误截图: 解决方法: 用root进入mysql终端,执行以下命令: alter database hive character set latin1;

  9. QT 进度条 QProgressDialog

    //默认构造函数 参数依次为,对话框正文,取消按钮名称,进度条范围,及所属 QProgressDialog *progressDlg=new QProgressDialog( QStringLiter ...

  10. centos 使用rz sz指令

    在linux下安装rz很方便,使用 yum install lrzsz 就可以安装,正常使用rz和sz命令. 下面对sz和rz命令的一点介绍: 一般来说,linux服务器大多是通过ssh客户端来进行远 ...