zoukankan      html  css  js  c++  java
  • 【DataBase】MySQL 31 游标

    游标 Cursor

    游标是用来存储查询的结果集的数据类型,也称为是光标

    在存储过程和函数中可以使用光标对结果集进行循环的处理

    光标的使用包括1、声明,2、开启,3、关闭,4、Fetch

    游标仅用于存储函数和

    语法 Syntax

    创建游标

    DECLARE 游标名 CURSOR FOR 查询SQL;

    打开游标

    OPEN 游标名;

    关闭游标

    CLOSE 游标名;

    使用游标

    FETCH 游标名 INTO 变量1,变量2,...;

    看完介绍以后发现其实是一个迭代器

    查询的结果也是一张表,游标就从0的位置起始,FETCH就是一行一行读取结果记录

    演示案例:

    DELIMITER $
    CREATE PROCEDURE cursorForAdmin()
    BEGIN
        -- 创建写入的变量
        DECLARE CID INT(11);
        DECLARE CUSERNAME VARCHAR(24);
        DECLARE CPASSWORD VARCHAR(24);
        
        -- 声明游标
        DECLARE adminCursor CURSOR FOR SELECT * FROM admin;
        
        -- 开启游标
        OPEN adminCursor;
        
        -- 使用游标读取一行记录赋值到上述的变量中
        FETCH adminCursor INTO CID, CUSERNAME, CPASSWORD;
        
        SELECT CID, CUSERNAME, CPASSWORD;
        
        -- 关闭游标
        CLOSE adminCursor;
    END 

    调用:

    CALL cursorForAdmin();

    第二次调用时把游标的推进到下一个行记录,写入上述的变量中

    变量被重新赋值,记录显示新的结果,

    如果游标已经推进到最后一行记录时,继续向下执行,发现已经没有记录了

    存储过程会报错:

    NO Data ,zero Rows Fectched SELECTED, OR PROCESSED

    循环获取游标实现:

    遍历首先需要获取查询结果的总记录数

    使用  COUNT(*)  来获取

    DELIMITER $
    CREATE PROCEDURE cursorForAdminByFor()
    BEGIN
        # 展示用的变量
        DECLARE CID INT(11);
        DECLARE CUSERNAME VARCHAR(24);
        DECLARE CPASSWORD VARCHAR(24);
        
        # 结束循环变量
        DECLARE done BOOLEAN DEFAULT 0;
        DECLARE o INT;
        
        # 游标变量
        DECLARE adminCursor CURSOR FOR SELECT * FROM admin;
        
        # 打开游标
        OPEN adminCursor;
        
        # 循环开始
        REPEAT
            FETCH NEXT FROM adminCursor INTO CID, CUSERNAME, CPASSWORD;
            SELECT CID, CUSERNAME, CPASSWORD;
        UNTIL done END REPEAT;
        
        # 关闭游标
        CLOSE adminCursor;
    END 

    调用:

    CALL cursorForAdminByFor();
  • 相关阅读:
    java把指定文字输出为图片流,支持文字换行
    java根据图片和文字生成自定义图片
    eclipse中10个最有用的快捷键组合
    关于版本号:alpha、beta、rc、stable
    Maven内置属性及使用
    Linux终端执行shell脚本,提示权限不够的解决办法
    执行tsung时报"Maximum number of concurrent users in a single VM reached
    SSIS连接SAPBI
    SharePoint 2013连接非默认端口的SQL Server
    SQL Server数据库损坏、检测以及简单的修复办法
  • 原文地址:https://www.cnblogs.com/mindzone/p/13935335.html
Copyright © 2011-2022 走看看