美文网首页
SQL第21课:使用游标

SQL第21课:使用游标

作者: 周运来就是我 | 来源:发表于2018-08-29 22:31 被阅读11次

mysql 游标的使用

游标是什么??

游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。

使用游标

在介绍如何创建游标之前,先说明下如何使用游标。

使用游标涉及几个明确的步骤。

1、在能够使用游标前,必须先定义它。这个过程实际上是没有检索数据的,它只是定义要使用的select语句。

2、一旦你定义了游标后,必须打开游标以供使用。这个过程用前面定义的select语句把数据实际检索出来。即这个步骤之后,我们就可以操作游标中的数据了。

3、对于有数据的游标,根据需要取出各行的数据来进行一定的操作。

4、使用完游标后,一定要关闭游标。

创建游标

创建一个游标的语法如下:

用declare 来定义,具体如下:

image

上面是定义游标的一般形式,当我们定义了一个游标之后,我们就可以来打开它、使用它、关闭它。

打开游标

open cursor_name;

关闭游标

close cursor_name;

使用游标
使用游标用fetch来取出数据,例如:fetch cursor_name in variable;//取出游标所指示的数据给局部变量variable

下面这个例子就是演示了创建一个游标,打开游标及关闭游标,但没有对游标所指示的数据进行数据。

image

实例:操作游标中的数据

需求是这样,我们手上有一个student2表,表中的结构和数据如下:


image

现在我们需要将student2表中所有学生的的平均成绩(mathScore+englishScore的一半)合成一行,用逗号’,’隔开。

对于这样一个需求,下面我们尝试用游标来实现。

DELIMITER $$

CREATE
    PROCEDURE `test`.`procedure_student2`()
    BEGIN
    -- declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。
    DECLARE val DOUBLE DEFAULT 0;
    DECLARE tempRes VARCHAR(10) DEFAULT '';
    DECLARE res VARCHAR(100) DEFAULT '' ;
    -- declare a cursor
    DECLARE cursor_avgScore CURSOR
    FOR
    SELECT (mathScore+englishScore)/2  AS student_avgScore FROM student2;
    -- declare a continue handler ,use finish while loop 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'  SET val= -1.0 ;  
    -- open cursor
    OPEN cursor_avgScore ;
    FETCH cursor_avgScore INTO val;
    -- fetch cursor
    WHILE val!=-1 DO
        SET tempRes=CONCAT(val,', ');
        SET res=CONCAT(res,tempRes);
        FETCH cursor_avgScore INTO val;
    END WHILE;                  
    -- close cursor
    CLOSE cursor_avgScore ;
    -- 显示结果
    SELECT res;
    END$$

DELIMITER ;

调用此存储过程

CALL procedure_student2();

运行结果如下:

image

上面这个是利用了while循环来一个一个的获取游标中的数据,在MySQL中我们还可以用repeat来做。

DELIMITER $$

CREATE
    PROCEDURE `test`.`procedure_student_v1`() 
    BEGIN
    -- declare some variable,必须在声明游标和句柄之前,而声明句柄必须在声明游标之后。
    DECLARE val DOUBLE DEFAULT 0;
    DECLARE tempRes VARCHAR(10) DEFAULT '';
    DECLARE res VARCHAR(100) DEFAULT '' ;
    -- declare a cursor
    DECLARE cursor_avgScore CURSOR
    FOR
    SELECT (mathScore+englishScore)/2  AS student_avgScore FROM student2;
    -- declare a continue handler ,use finish while loop 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'  SET val= -1.0 ;  
    -- open cursor
    OPEN cursor_avgScore ;  
    -- fetch cursor
    REPEAT  
        FETCH cursor_avgScore INTO val;
        IF val!=-1 THEN
            SET tempRes=CONCAT(val,', ');
            SET res=CONCAT(res,tempRes);
        END IF;
    UNTIL val=-1 END REPEAT; -- 居然MySQL中 用 val=-1 来结束循环,原以为应该和java、c类似,用val==-1来结束。                 
    -- close cursor
    CLOSE cursor_avgScore ;
    -- 显示结果
    SELECT res;
    END$$

DELIMITER ;

相关文章

  • 第十二章 使用嵌入式SQL(四)

    第十二章 使用嵌入式SQL(四) SQL游标 游标是指向数据的指针,该数据允许嵌入式SQL程序对所指向的记录执行操...

  • SQL第21课:使用游标

    mysql 游标的使用 游标是什么?? 游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句...

  • MySQL-与Python交互

    pymysql的使用流程 建立数据库连接 创建游标对象 使用游标对象的方法和SQL语句操控MySQL数据库 提交数...

  • Oracle PL/SQL (8) - 游标Cursor的基本用

    1、使用显示游标修改数据在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行。显式游标只有在...

  • PL/SQL游标浅谈

    前言 厚积而薄发。 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现。 游标的概念 --为了处理...

  • BI-SQL丨游标

    游标 游标这个概念在SQL中比较重要,在其他语言中也有类似的处理办法。 那么什么是游标呢?简而言之,SQL语句返回...

  • 第三周学习总结

    本周继续学习了SQL必知必会这本书,从第8课开始,已学到第21课使用游标。本周主要学习了用函数处理汇总数据,分组查...

  • SQL学习十九、使用游标

    游标(cursor)是一个存储在 DBMS 服务器上的数据库查询, 它不是一条 SELECT 语句,而是被该语句检...

  • Python操作MySQL数据库

    使用的库 pymysql 使用 使用大体分为如下步骤: 连接数据库 获取游标 执行SQL语句 提交执行 关闭连接 ...

  • SQL SERVER 单游标存储过程

    SQL SERVER 单游标存储过程模板

网友评论

      本文标题:SQL第21课:使用游标

      本文链接:https://www.haomeiwen.com/subject/xkgeqftx.html