mysql 定义游标_mysql 游标的使用
游标是什么??
游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。
使用游标
在介绍如何创建游标之前,先说明下如何使用游标。
使用游标涉及几个明确的步骤。
1、在能够使用游标前,必须先定义它。这个过程实际上是没有检索数据的,它只是定义要使用的select语句。
2、一旦你定义了游标后,必须打开游标以供使用。这个过程用前面定义的select语句把数据实际检索出来。即这个步骤之后,我们就可以操作游标中的数据了。
3、对于有数据的游标,根据需要取出各行的数据来进行一定的操作。
4、使用完游标后,一定要关闭游标。
创建游标
创建一个游标的语法如下:
用declare 来定义,具体如下:
上面是定义游标的一般形式,当我们定义了一个游标之后,我们就可以来打开它、使用它、关闭它。
打开游标:
open cursor_name;
关闭游标:
close cursor_name;
使用游标:
使用游标用fetch来取出数据,例如:fetch cursor_name in variable;//取出游标所指示的数据给局部变量variable
下面这个例子就是演示了创建一个游标,打开游标及关闭游标,但没有对游标所指示的数据进行数据。
实例:操作游标中的数据
需求是这样,我们手上有一个student2表,表中的结构和数据如下:
现在我们需要将student2表中所有学生的的平均成绩(mathScore+englishScore的一半)合成一行,用逗号’,’隔开。
对于这样一个需求,下面我们尝试用游标来实现。
1 DELIMITER $$2
3 CREATE
4 PROCEDURE`test`.`procedure_student2`()5 BEGIN
6 --declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。
7 DECLARE val DOUBLE DEFAULT 0;8 DECLARE tempRes VARCHAR(10) DEFAULT '';9 DECLARE res VARCHAR(100) DEFAULT '';10 --declare a cursor
11 DECLARE cursor_avgScore CURSOR
12 FOR
13 SELECT (mathScore+englishScore)/2 AS student_avgScore FROMstudent2;14 --declare a continue handler ,use finish while loop
15 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET val= -1.0;16 --open cursor
17 OPENcursor_avgScore ;18 FETCH cursor_avgScore INTOval;19 --fetch cursor
20 WHILE val!=-1DO21 SET tempRes=CONCAT(val,',');22 SET res=CONCAT(res,tempRes);23 FETCH cursor_avgScore INTOval;24 END WHILE;25 --close cursor
26 CLOSEcursor_avgScore ;27 --显示结果
28 SELECTres;29 END$$30
31 DELIMITER ;
调用此存储过程
CALL procedure_student2();
运行结果如下:
上面这个是利用了while循环来一个一个的获取游标中的数据,在MySQL中我们还可以用repeat来做。
1 DELIMITER $$2
3 CREATE
4 PROCEDURE`test`.`procedure_student_v1`()5 BEGIN
6 --declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。
7 DECLARE val DOUBLE DEFAULT 0;8 DECLARE tempRes VARCHAR(10) DEFAULT '';9 DECLARE res VARCHAR(100) DEFAULT '';10 --declare a cursor
11 DECLARE cursor_avgScore CURSOR
12 FOR
13 SELECT (mathScore+englishScore)/2 AS student_avgScore FROMstudent2;14 --declare a continue handler ,use finish while loop
15 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET val= -1.0;16 --open cursor
17 OPENcursor_avgScore ;18 --fetch cursor
19 REPEAT20 FETCH cursor_avgScore INTOval;21 IF val!=-1 THEN
22 SET tempRes=CONCAT(val,',');23 SET res=CONCAT(res,tempRes);24 END IF;25 UNTIL val=-1 END REPEAT; --居然MySQL中 用 val=-1 来结束循环,原以为应该和java、c类似,用val==-1来结束。
26 --close cursor
27 CLOSEcursor_avgScore ;28 --显示结果
29 SELECTres;30 END$$31
32 DELIMITER ;
转自:http://blog.csdn.net/u010412719/article/details/51125496
mysql 定义游标_mysql 游标的使用相关推荐
- 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍
本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...
- mysql c 游标_mysql游标示例 mysql游标简易教程
从mysql V5.5开始,进行了一次大的改变,就是将InnoDB作为默认的存储引擎.InnoDB支持事务,而且拥有相关的RDBMS特性:ACID事务支持,数据完整性(支持外键),灾难恢复能力等等. ...
- mysql游标_MySQL游标概念与用法详解
本文实例讲述了MySQL游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...
- mysql while 游标_mysql 游标 loop while 的使用
项目需求:对表进行重新构建,这个用java的缺点是数据的传送以及遍历的话会消耗更多的资源,因此使用mysql的存储过程进行构建. 具体要求:跳过原本设置的假期和课程本身的假期对数据进行重排. 1.游标 ...
- mysql游标_MySQL 游标的使用
MySQL 游标 游标的特性 不敏感:数据库可以选择不复制结果集 只读 不滚动:游标只能向一方向前进,并且不可以跳过任何一行数据 游标的优点 游标是针对行操作的,对从数据库中 select 查询得到的 ...
- mysql 定义存储过程_mysql——定义——存储过程和函数——概念
存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中 一.创建存储过程 语法格式: create procedure sp_name ( [ proc_ ...
- mysql定义结束_mysql自定义开始结束日,以周为维度
下午网上找了3个小时,就是没有找到一个合适的. 需求:以周为维度,自定义开始结束日期,比如从周五开始,周四结束,计算数据. SELECT FROM_DAYS(TO_DAYS(gmt_create) - ...
- mysql定义语言_MySQL基础(一)--数据定义语言DDL
一.数据库的创建.修改和删除 1.创建数据库 create database [if not exists] 数据库名[ character set 字符集名]; 2.修改数据库 alter data ...
- mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)
MySQL执行检索操作会返回一组称为结果集的行,这组返回的行都是与SQL 语句相匹配的行(零行或多行),但是,使用简单的select 语句,没有办法得到第一行.下一行.或前十行,也不存在一行地处理所有 ...
- mysql游标的用法及作用_Mysql 游标的用法及其作用
mysql 游标的用法和作用,话不多说,这个是网上看到的例子,简答粗暴. 例子: 当前有三张表a.b.c其中a和b是一对多关系,b和c是一对多关系,现在需要将b中a表的主键存到c中: 常规思路就是将b ...
最新文章
- poj 3740 Easy Finding
- 有没有办法检查`null`和`undefined`?
- 笔记本电脑投屏到电视_Thinkpad笔记本PC无线连接电视或投影机,性能稳定的商用投屏解决方案...
- Failed to bind properties under ‘logging.level‘ to java.util.Map java.lang.String, java.lang.String
- bin/...的访问被拒绝被拒绝的问题
- Taro+react开发(38)注意请求接口的/
- 【转】Magento2目录结构
- 红橙Darren视频笔记 CoordinatorLayout:实现自定义behavior
- 使用C语言在windows下一口气打开一批网页
- php备份网站程序,使用PHP备份整个网站
- Hibernate-02-核心配置文件Hibernate.cfg.xml
- 2021-05-06
- 锐捷交换机忘记密码解决方案:恢复出厂设置、重置配置文件
- 99乘法表带颜色HTML隔行变色,javascript小实例,实现99乘法表及隔行变色
- Hyperic HQ简介
- okhttp https ip直连设置Host
- PEM文件和private.key文件生成Tomcat服务器所需的jks文件(配置SSL用)
- 五招祛痘法让熟女远离痘痘 - 健康程序员,至尚生活!
- 【IIS音频传输】1、认识IIS
- 分享Python简短代码,实现TXT转换MySQL文件。
热门文章
- idea中maven找不到本地仓库jar包_有人说 Maven 很简单,我却被 伤害 过
- python读取dat文件写入表格_python DDT读取excel测试数据
- CComboBoxEx 扩展组合框
- pdf reference官方指南之-语法基础和文件结构
- 图解Web服务器网关接口WSGI(Web Server Gateway Interface)
- linux下jdk1.8搭建笔记
- OpenCasCade中一个V3d_Viewer对应多个AIS_InteractiveContext的使用
- 一般的病毒通过注册表自启动的方式不断完善中。。。。
- SAP 独立系统的传输请求
- 163Editor 编辑器概览