一.游标的基本使用

1.定义游标:

declare fetchSeqCursor cursor for select seqname, value from sys_sequence;

使用游标

open fetchSeqCursor;

fetch数据:

fetch

fetchSeqCursor

into _seqname, _value;

关闭游标:

close fetchSeqCursor;

2.遍历方式

repeat方式:

DROP PROCEDURE IF EXISTS `NestedCurosr`;

delimiter //

CREATE PROCEDURE `NestedCurosr`()

BEGIN

DECLARE Done_nested INT DEFAULT 0 ;

DECLARE i_server_idx, i_type INT default 0;

DECLARE rs_reward CURSOR FOR select id from reward_content;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done_nested = 1 ;

OPEN rs_reward;

REPEAT

FETCH rs_reward INTO i_type;

IF NOT Done_nested THEN

select concat(' type', i_type);

end if;

UNTIL Done_nested END REPEAT;

CLOSE rs_reward;

END //

delimiter ;

注意:假设t表有n条记录,这个循环体循环n次?

实际上是n+1次。因为到达t的最后一行的时候stopFlag还是1。这个值的修改是在下一次fetch的时候改的,但是改完后就进入begin了,没有再判断,所以会多执行一次。这多出来的一次的temp_f的值和上一次相同。

解决方法:在进入Begin之后再判断一下stopFlag的值

Loop方式:

DROP PROCEDURE IF EXISTS `NestedCurosr`;

delimiter //

CREATE PROCEDURE `NestedCurosr`()

BEGIN

DECLARE Done_nested INT DEFAULT 0 ;

DECLARE i_server_idx, i_type INT default 0;

DECLARE rs_reward CURSOR FOR select id from reward_content;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done_nested = 1 ;

OPEN rs_reward;

reward_loop: LOOP -- Loop through class in grade.

FETCH rs_reward INTO i_type;

IF Done_nested=1 THEN

LEAVE reward_loop;

END IF;

select concat(' type', i_type);

END LOOP reward_loop;

CLOSE rs_reward;

END //

delimiter ;

二.嵌套游标

mysql的嵌套游标的使用有别于单级游标,主要区别在于使用了不方便使用repeat方式,而是用Loop方式,上代码。

关于error handler( 注意在 Mysql 里同一个 error 的 handler 只能定义一次,多定义的话,在compile 的过程中会提示里duplicate handler defination ,所以 NOT FOUND 的 handler就只能定义一次 )。

DROP PROCEDURE IF EXISTS `NestedCurosr`;

delimiter //

CREATE PROCEDURE `NestedCurosr`()

#LANGUAGE SQL

#DETERMINISTIC

#CONTAINS SQL

#COMMENT ''

BEGIN

DECLARE Done_nested INT DEFAULT 0 ;

DECLARE i_server_idx, i_type INT default 0;

DECLARE rs_server CURSOR FOR select server_idx from server_config;

DECLARE rs_reward CURSOR FOR select id from reward_content;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done_nested = 1 ;

#level

OPEN rs_server;

server_loop: LOOP

FETCH NEXT FROM rs_server INTO i_server_idx;

IF Done_nested=1 THEN

LEAVE server_loop;

END IF;

select concat(' serverIdx:', i_server_idx);

OPEN rs_reward;

reward_loop: LOOP -- Loop through class in grade.

FETCH rs_reward INTO i_type;

IF Done_nested=1 THEN

LEAVE reward_loop;

END IF;

select concat(' type', i_type);

END LOOP reward_loop;

CLOSE rs_reward;

SET Done_nested=0;

END LOOP server_loop;

CLOSE rs_server;

END //

delimiter ;

mysql游标嵌套怎么写,mysql游标和嵌套游标相关推荐

  1. 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍

    本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...

  2. 写MySQL存储过程实现动态执行SQL

    写MySQL存储过程实现动态执行SQL --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(i ...

  3. mysql数据库在哪里写语句_Mysql数据库操作语句

    零.用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PAS ...

  4. 从0开始,手写MySQL事务

    说在前面:从0开始,手写MySQL的学习价值 尼恩曾经指导过的一个7年经验小伙,凭借精通Mysql, 搞定月薪40K. 从0开始,手写一个MySQL的学习价值在于: 可以深入地理解MySQL的内部机制 ...

  5. 3天怒肝5万字!阿里P7大佬手写MySQL超全笔记,还担心学不会吗?

    下面对于MySQL进行相关介绍,文档的内容较为基础,针对刚开始学习的同学,仅仅涉及操作,少量原理,大佬请绕道哦.因字数太多,会分为两篇发放. 一.MySQL架构介绍 1-MySQL简介 概述 MySQ ...

  6. mysql事务手写笔记_兴奋了!阿里技术官手写“MySQL笔记”,传授你年薪百万级干货...

    前言 MySQL重要吗?重要!为什么重要?因为它在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的.My ...

  7. go 连接 kafka 写 mysql

    引言 上一篇中提到了,go 连接 kafka 进行消息的生产和消费过程.在这一篇中,将对 go 连接 kafka 写 mysql 进行简单的设计和实现. 本文主要针对的是 Mac 系统,如果使用其它操 ...

  8. mysql 列名能不能写成col1、col2_Mysql 寒假刷题TIPs

    ##mysql数据库事务### 数据库事务(简称:事务)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元. 1. 主键 超键 候选键 外键 主 键:数据库表中对储存数据对象予以唯 ...

  9. 扩展mysql_扩展mysql - 手把手教你写udf

    1 MySQL简介 MySQL是最流行的开放源码SQL数据库管理系统,相对于Oracle,DB2等大型数据库系统,MySQL由于其开源性.易用性.稳定性等特点,受到个人使用者.中小型企业甚至一些大型企 ...

  10. mysql与redis数据同步(c/c++)(写mysql同步到redis,并且以json格式保存)

    系统开发中时常会需要缓存来提升并发读的能力,这时可以通过mysql的UDF和hiredis来进行同步 原理: 通过mysql自动同步redis 在服务端开发过程中,一般会使用MySQL等关系型数据库作 ...

最新文章

  1. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...
  2. 逆向常用命令android常用逆向命令
  3. 佳博GprinterApp编辑软件使用说明
  4. AutoCAD2000~2010完整版下载地址
  5. 电机矢量控制(霍尔位置传感器)
  6. python操作系统接口错误_Python-接口自动化(四) - 许小猪 - 博客园
  7. 怎么做口碑营销?口碑营销有哪些方式?
  8. Google Play开发者账号注册教程(new)
  9. 【Leetcode】1324. Print Words Vertically
  10. 寻找“安全圈锦鲤” | 4万粉丝,独宠你一人(倒计时2天)
  11. 神来之笔之傅里叶变换(频谱)
  12. 相似度系列-5:语义方法:BERTSCORE: EVALUATING TEXT GENERATION WITH BERT
  13. 关闭谷歌Chrome浏览器历史记录提示
  14. 打印机服务器怎么配置文件,打印机服务器ftp配置文件
  15. linux 强制重启 sysrq,用Magic SysRq键实现Linux安全重启
  16. ROS:*.bag.active恢复
  17. 马云、马化腾要合作了?阿里传出新消息,或将支持微信支付
  18. 用于连接PLC与数据库的定制解决方案
  19. ros::spin()和ros::AsyncSpinner
  20. 入門篇-耦合Coupling AC/DC/GND差別在哪

热门文章

  1. emacs操作方法总结
  2. Linux编译工具:gcc入门
  3. 深度学习图像分类(九):SENet
  4. 机房服务器硬件供应,机房服务器硬件维护方法大全
  5. win10系统自带防病毒配置
  6. [转载] QT中的connect用法总结
  7. 脚本计算文件MD5 SHA1 SHA256值(Windwos及Linux)
  8. C++字符串输入输出操作
  9. 适合C语言学习的书籍推荐 | 初学者必备
  10. 最新网卡驱动下载win7