MySql必知必会实战练习(六)游标
游标主要用于交互式应用,滚动屏幕上的数据,并对数据进行浏览或做出更改
看一下下面的例子:
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必知必会实战练习(六)游标的更多相关文章
- MySql必知必会实战练习(二)数据检索
在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...
- MySql必知必会实战练习(三)数据过滤
在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- mysql必知必会——GROUP BY和HAVING
mysql必知必会——GROUP BY和HAVING 创建表结构 create table `employ_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- mysql学习--mysql必知必会1
例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- mysql必知必会系列(一)
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- 《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 ...
随机推荐
- Winform ObservableCollection 添加删除修改无效
WPF中ObservableCollection 可以很好的使用. 在Winform中,之前使用ObservableCollection 做了几个功能,貌似增删改都可以. 今天写个Demo的时候发现不 ...
- No module named bz2
yum install bzip* python2.6 import bz2 python2.7 import bz2 error 解决:sudo cp /usr/lib64/python2.6/li ...
- [nowcoder]再编号
链接:https://www.nowcoder.com/acm/contest/158/C 每变化一次,tot=tot*(n-1),且每两个数之差delta*=-1,直接根据这两个性质暴力循环1000 ...
- fabric查看本地与远程主机信息
#!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...
- 微信小程序获取用户信息,解密encryptedData 包括敏感数据在内的完整用户信息的加密数据
package com.iups.wx.wxservice; import java.io.UnsupportedEncodingException; import java.security.Alg ...
- Windows下搭建Apache+Django+Python Web服务环境
最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具 ...
- 使用mybatis报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.String]
报错constructor found in com.atguigu.mybatis.bean.Department matching [java.lang.Integer, java.lang.St ...
- spring3: Aspectj后置返回通知
Aspectj后置返回通知 接口: package chapter1.server; public interface IHelloService2 { public int sayAfterRetu ...
- python之list,tuple,str,dic简单记录(二)
切片对象:例子:In [13]: l = [1,23,4,5,5,6,8]In [14]: l[::1]Out[14]: [1, 23, 4, 5, 5, 6, 8] In [15]: l[::2]O ...
- 随机森林和adaboost算法(待更新)
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).