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();
  • 相关阅读:
    自学Python3.5-字符串格式化 作用域 递归
    自学Python3.2-函数分类(内置函数)
    自学Python3.1-函数基础
    自学Python2.7-collections系列
    自学Python2.6-深浅拷贝
    自学Python2.5-基本数据类型-set集合
    自学Python2.4-基本数据类型-字典dict(objct)
    自学Python2.3-基本数据类型-元组tuple(object) 方法
    自学Python2.2-基本数据类型-列表list(object)
    java通过jdbc访问mysql,update数据返回值的思考
  • 原文地址:https://www.cnblogs.com/mindzone/p/13935335.html
Copyright © 2011-2022 走看看