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();
  • 相关阅读:
    学习 Apache FileMatchs 规则
    yii2 vendor/bower/jquery/dist not exist
    Ionic POST提交使用普通表单提交数据
    Yii2 在php 7.2环境下运行,提示 Cannot use ‘Object’ as class name
    Yii2 使用 npm 安装的包
    phpStorm 激活
    Chrome DNS_PROBE_FINISHED_NXDOMAIN
    Yii2 中使用ts
    Js 对 浏览器 的 URL的操作
    js 编码、解码与asp.net 编码、解码
  • 原文地址:https://www.cnblogs.com/mindzone/p/13935335.html
Copyright © 2011-2022 走看看