Mysql的游标究竟怎么用–映日荷花别样红

Mysql从5.0开始支持存储过程和trigger,给我们喜欢用mysql的朋友们更喜欢mysql的理由了,语法
上和PL/SQL有差别,不过搞过编程的人都知道,语法不是问题,关键是思想,大致了解语法后,就从
变量定义,循环,判断,游标,异常处理这个几个方面详细学习了。关于游标的用法Mysql现在提供
的还很特别,虽然使用起来没有PL/SQL那么顺手,不过使用上大致上还是一样,
定义游标
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;
使用游标
open fetchSeqCursor;
fetch数据
fetch cursor into _seqname, _value;
关闭游标
close fetchSeqCursor;
不过这都是针对cursor的操作而已,和PL/SQL没有什么区别吧,不过光是了解到这个是根本不足以
写出Mysql的fetch过程的,还要了解其他的更深入的知识,我们才能真正的写出好的游标使用的proc
edure

首先fetch离不开循环语句,那么先了解一下循环吧。
我一般使用Loop和while觉得比较清楚,而且代码简单。
这里使用Loop为例
fetchSeqLoop:Loop
fetch cursor into _seqname, _value;
end Loop;
现在是死循环,还没有退出的条件,那么在这里和oracle有区别,Oracle的PL/SQL的指针有个隐性变
量%notfound,Mysql是通过一个Error handler的声明来进行判断的,
declare continue handler for Not found (do some action);
在Mysql里当游标遍历溢出时,会出现一个预定义的NOT FOUND的Error,我们处理这个Error并定义一
个continue的handler就可以叻,关于Mysql Error handler可以查询Mysql手册
定义一个flag,在NOT FOUND,标示Flag,在Loop里以这个flag为结束循环的判断就可以叻。
declare fetchSeqOk boolean; ## define the flag for loop judgement
declare _seqname varchar(50); ## define the varient for store the data
declare _value bigint(20);
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;## define the cursor
declare continue handler for NOT FOUND set fetchSeqOk = true; ## define the continue handler for not
found flag
set fetchSeqOk = false;

open fetchSeqCursor;
fetchSeqLoop:Loop
if fetchSeqOk then
leave fetchSeqLoop;
else
fetch cursor into _seqname, _value;
select _seqname, _value;
end if;
end Loop;
close fetchSeqCursor;

这就是一个完整的过程叻,那么会思考的人一般在这里都会思考,如果是这样的话,怎样做嵌套的游
标循环叻,这里可以根据statement block的scope实现叻,Mysql里通过begin end来划分一个statem
ent block,在block里定义的变量范围也在这个block里,所以关于嵌套的游标循环我们可以多加一
个begin end来区分他们所对应的error handler(注意在Mysql里同一个error的handler只能定义一次
,多定义的话,在compile的过程中会提示里duplicate handler defination,所以NOT FOUND的hand
ler就只能定义一次),在一个begin end里定义这个里面游标的NOT FOUND handler,

declare fetchSeqOk boolean; ## define the flag for loop judgement
declare _seqname varchar(50); ## define the varient for store the data
declare _value bigint(20);
declare fetchSeqCursor cursor for select seqname, value from sys_sequence;## define the cursor
declare continue handler for NOT FOUND set fetchSeqOk = true; ## define the continue handler for not
found flag
set fetchSeqOk = false;

open fetchSeqCursor;
fetchSeqLoop:Loop
if fetchSeqOk then
leave fetchSeqLoop;
else
fetch cursor into _seqname, _value;
begin
declare fetchSeqOk boolean default ‘inner’;
declare cursor2 cursor for select …. from …;## define the cursor
declare continue handler for NOT FOUND set fetchSeqOk = true; ## define the continue handler for n
ot
set fetchSeqOk = false;
open cursor2;
fetchloop2 loop
if fetchSeqOk then
else
end if;
end loop;
close cursor2;
end;
end if;
end Loop;
close fetchSeqCursor;

这样就可以轻松实现更多层次的循环了,不过相对oracle的PL/SQL来说,Mysql现在还不支持动态游
标的定义,所以很强大的动态拼出SQL的在游标里还不能做到,不过这完全不影响我对Mysql的喜爱程
度,她就想那羞涩的荷花一样,虽然没有灿烂的色彩,但那简约的色调,清新而不染一丝铅尘的高雅
,一样吸引着无数的mysql迷么,正如接天莲叶无穷碧,映日荷花别样红。

付:Mysql也有类似Oracle里的execute immediate的动态SQL的功能,通过这个功能可有多少弥补一
些动态游标的缺憾叻
set @sqlStr=’select * from table where condition1 = ?’;
prepare s1 for @sqlStr;
execute s1 using @condition1; 如果有多个参数用逗号分隔
deallocate prepare s1; 手工释放,或者是connection关闭时,server自动回收。

Mysql的游标究竟怎么用–映日荷花别样红相关推荐

  1. Mysql的游标究竟怎么用--映日荷花别样红

    Mysql的游标究竟怎么用--映日荷花别样红 Mysql从5.0开始支持存储过程和trigger,给我们喜欢用mysql的朋友们更喜欢mysql的理由了,语法 上和PL/SQL有差别,不过搞过编程的人 ...

  2. (转)Mysql的游标究竟怎么用--映日荷花别样红

    Mysql的游标究竟怎么用--映日荷花别样红 Mysql从5.0开始支持存储过程和trigger,给我们喜欢用mysql的朋友们更喜欢mysql的理由了,语法 上和PL/SQL有差别,不过搞过编程的人 ...

  3. 映日荷花别样红是什么季节,映日荷花别样红的上一句是什么?全诗赏析

    映日荷花别样红是一句流传千古的诗词,那你还记得这句诗词是出自哪首古诗吗?映日荷花别样红的上一句是什么呢?映日荷花别样红描写的是什么季节的景象呢?快和我一起来了解下映日荷花别样红全诗吧. 映日荷花别样红 ...

  4. 接天莲叶无穷碧,映日荷花别样红

    前天去了圆明园.本来是想去清华的.因为以前就知道清华有个荷塘 .荷塘月色吗.我朋友就要去圆明园.我想反正荷塘的花还没开呢.就先去圆明园吧.     到了圆明园才知道.圆明园有北京的荷花节.进门却找不到 ...

  5. 接天莲叶无穷碧,映日荷花别样红 1

    前天去了圆明园.本来是想去清华的.因为以前就知道清华有个荷塘 .荷塘月色吗.我朋友就要去圆明园.我想反正荷塘的花还没开呢.就先去圆明园吧.     到了圆明园才知道.圆明园有北京的荷花节.进门却找不到 ...

  6. 毕竟西湖六月中,风光不与四时同。接天莲叶无穷碧,映日荷花别样红

    现在西湖曲院风合荷花正好看,你没有眼福了哈哈 这首诗你肯定很熟悉,不知道你还记不记得诗的题目,<晓光净慈寺送杜子方>,杨万里写的. 净慈寺,我经常去那里吃斋饭的,三块钱,吃斋饭让我知道节省 ...

  7. 毕竟西湖六月中,风光不与四时同。接天莲叶无穷碧,映日荷花别样红。

    现在西湖曲院风合荷花正好看,你没有眼福了哈哈 这首诗你肯定很熟悉,不知道你还记不记得诗的题目,<晓光净慈寺送杜子方>,杨万里写的. 净慈寺不知道你有没有去过,我经常去那里吃斋饭的,三块钱, ...

  8. mysql数据库游标有什么特性_MySQL数据库游标的概念介绍和游标的使用讲解

    一.MySQL游标的概念 1.游标介绍 MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想 ...

  9. MySQL存储过程 游标

    MySQL存储过程  游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...

最新文章

  1. 一句话搞定webmap(一)——轻地图组件
  2. 普渡大学电子计算机专业,普渡大学电子工程(EE)专业介绍
  3. Windows Azure Marketplace增加对六种语言和HTML5应用程序的支持
  4. vue将文本渲染html,vue2.0 之文本渲染-v-html、v-text
  5. npm使用taobao镜像
  6. 常见查找算法(Java代码实现)
  7. QMap排序方法运用实例
  8. [译]发布ABP v0.19包含Angular UI选项
  9. 栈--进栈,出栈指针修改的顺序问题
  10. 【缩点】洛谷P3387
  11. 《DNS与BIND(第5版)》——10.12 系统优化
  12. 更改应用程序图标_苹果手机升级iOS14试试自定义应用图标
  13. 计算机桌面文件删除不掉是怎么了,文件删不掉怎么办?如何删除一个删不掉的文件?...
  14. 首次使用计算机 鼠标没反应,电脑鼠标没反应是怎么回事
  15. 迪文屏中关于MODBUS的接口配置
  16. Go sync.Pool 浅析
  17. python计算标准差函数_Python pandas,pandas常用统计方法,求和sum,均值mean,最大值max,中位数median,标准差std...
  18. 2022阿里云国际注册教程-不用绑定paypal注册-Unirech阿里云代充
  19. android 原生分享文件,Android原生文件分享
  20. java帮助文档在哪

热门文章

  1. 「穷人」花钱指南 —— 简要理财
  2. Vue 中调用 QQ官方的登录
  3. mysql查询 多门课程的平均成绩_MySQL 45道查询习题详解
  4. C语言常用词汇(1)
  5. linux:rm运用
  6. 微信小程序前端流程图(订票系统开发总结)
  7. 【Spring系列】- Bean生命周期底层原理
  8. codeforces Div3 E. Boxers(签到题)
  9. 11-03 成长日记
  10. C#20位纯数字条形码制作