zoukankan      html  css  js  c++  java
  • mysql 存储过程 查询结果集循环处理游标使用

    2020年3月25日11:16:15

    注意每个版本的mysq的存储过程,触发器写法都会有些许区别,注意查看官方版本,不然你网上copy的语句可能执行无效,或者不成功

    官方英文说明文档

    https://dev.mysql.com/doc/refman/5.7/en/cursors.html

    demo 数据版本mysql 5.7.22-log 

    如果需要debug你写的存储过程推荐:

    dbForge Studio for MySQL 这个工具挺好使的

    使用请参考

    https://blog.csdn.net/weixin_42740530/article/details/94553996

    CREATE DEFINER = 'zx'@'%'
    PROCEDURE `v2-20200212`.zx11 ()
    BEGIN
      -- 声明一些需要用到的变量
      DECLARE done int DEFAULT FALSE;
      DECLARE z_id int DEFAULT 0;
      DECLARE z_admin_login_name varchar(255);
      DECLARE z_remark varchar(255);
      -- 声明游标
      DECLARE admin_list CURSOR FOR
      SELECT
        `id`,
        `admin_login_name`,
        `remark`
      FROM admin;
      -- 声明 是否没有记录
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
      -- 打开游标
      OPEN admin_list;
    -- 开始循环
    read_loop:
      LOOP
        -- 注意声明变量类型和接受数据的顺序一致
        FETCH admin_list INTO z_id, z_admin_login_name, z_remark;
    
        -- 如果没有结果集就退出循环
        IF done THEN
          LEAVE read_loop;
        END IF;
        -- 具体执行的sql语句
        UPDATE admin
        SET remark = z_id
        WHERE id = z_id;
      -- 结束循环
      END LOOP;
    
      -- 关闭游标
      CLOSE admin_list;
    END

     官方demo

    CREATE PROCEDURE curdemo()
    BEGIN
      DECLARE done INT DEFAULT FALSE;
      DECLARE a CHAR(16);
      DECLARE b, c INT;
      DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
      DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
      OPEN cur1;
      OPEN cur2;
    
      read_loop: LOOP
        FETCH cur1 INTO a, b;
        FETCH cur2 INTO c;
        IF done THEN
          LEAVE read_loop;
        END IF;
        IF b < c THEN
          INSERT INTO test.t3 VALUES (a,b);
        ELSE
          INSERT INTO test.t3 VALUES (a,c);
        END IF;
      END LOOP;
    
      CLOSE cur1;
      CLOSE cur2;
    END;
  • 相关阅读:
    视频笔记
    【LeetCode】给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
    getopt函数用法
    一些常用的算法库
    c语言结构体
    C语言中time_t数据类型详细介绍
    c语言 static的用法
    C语言中extern的用法
    MATLAB textread函数
    正则表达式
  • 原文地址:https://www.cnblogs.com/zx-admin/p/12564915.html
Copyright © 2011-2022 走看看