mysql read loop_mysql数据库游标的使用

2023-11-18

Mysql在5.0版本支持在存储过程中使用游标。

游标声明必须出现在处理程序声明变量和条件的声明后。

游标的使用如下:

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;

上面的例子是从官方提供的文档上找到的.

CREATE TABLE test(

id INT AUTO_INCREMENT PRIMARY KEY,

product_name VARCHAR(50),

product_type INT

);

INSERT INTO test(product_name,product_type)VALUES('mobile',1);

INSERT INTO test(product_name,product_type)VALUES('computer',1);

INSERT INTO test(product_name,product_type)VALUES('apple',2);

INSERT INTO test(product_name,product_type)VALUES('Orange',2);

CREATE TABLE test_temp(

id INT,

product_name VARCHAR(50)

);

下面的是有游标的存储过程

DELIMITER $$

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done BOOLEAN DEFAULT FALSE;

DECLARE _id INT;

DECLARE _product_name VARCHAR(50);

DECLARE cur CURSOR FOR SELECT id,product_name FROM test WHERE product_type=1;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP

FETCH cur INTO _id,_product_name;

IF done THEN

LEAVE read_loop;

END IF;

INSERT INTO test_temp (id,product_name)VALUES(_id,_product_name);

END LOOP;

CLOSE cur;

END$$

DELIMITER;

调用存储过程

CALL curdemo;

查看运行结果

SELECT * FROM test_temp;

运行结果为:

idproduct_name

1mobile

2computer

此存储过程是可以运行的,结果也是正确的,下面稍微修改一下存储过程.

DELIMITER $$

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done BOOLEAN DEFAULT FALSE;

DECLARE _id INT;

DECLARE _product_name VARCHAR(50);

DECLARE cur CURSOR FOR SELECT id,product_name FROM test WHERE product_type=1;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP

FETCH cur INTO _id,_product_name;

IF done THEN

LEAVE read_loop;

END IF;

SELECT product_type INTO @product_type FROM test WHERE product_type = 3;

INSERT INTO test_temp (id,product_name)VALUES(_id,_product_name);

END LOOP;

CLOSE cur;

END$$

DELIMITER;

清空test_temp表数据

TRUNCATE TABLE test_temp;

再次调用存储过程后,

CALL curdemo;

SELECT * FROM test_temp;

运行结果为:

idproduct_name

1mobile

为什么少了一行数据,不就是多加了一条select 语句嘛

原因很简单,就是SELECT product_type INTO @product_type FROM test WHERE product_type = 3;

抛出了一个not found的异常,从而使得游标的循环终止了.

很多时候在游标循环的过程体中,调用了其他存储过程,但是我们不知道其他存储过程会不会抛出not found,我们的目的是循环完游标,怎么解决?

一种解决方法如下:

DELIMITER $$

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done BOOLEAN DEFAULT FALSE;

DECLARE _id INT;

DECLARE _product_name VARCHAR(50);

DECLARE cur CURSOR FOR SELECT id,product_name FROM test WHERE product_type=1;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP

SET done = FALSE;

FETCH cur INTO _id,_product_name;

IF done THEN

LEAVE read_loop;

END IF;

SELECT product_type INTO @product_type FROM test WHERE product_type = 3;

INSERT INTO test_temp (id,product_name)VALUES(_id,_product_name);

END LOOP;

CLOSE cur;

END$$

DELIMITER;

运行结果正常.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql read loop_mysql数据库游标的使用 的相关文章

  • ant design pro v5 动态路由

    ant design pro v5 动态菜单 1 添加模拟数据 2 添加request请求 3 修改app tsx文件 a 第一步修改getInitialState b 第二步修改layout 4 app tsx 完整代码 5 解决icon
  • qt : day 3

    1 完成登录框的按钮操作 并在登录成功后进行界面跳转 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The follow
  • python研究生专业_用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!

    写在前面 考研在即 想多了解考研er的想法 就是去找学长学姐或者去网上搜索 贴吧就是一个好地方 而借助强大的工具可以快速从网络鱼龙混杂的信息中得到有价值的信息 虽然网上有很多爬取百度贴吧的教程和例子 但是贴吧规则更新快 目的不一样 爬取的内
  • 移动Web开发入门(四) -- 移动端调试

    文章目录 移动端调试 浏览器调试 进入控制台 进入浏览器模拟器 切换测试机型 添加测试机型 改变屏幕尺寸 改变DPR 改变网络情况 改变屏幕显示大小 横 竖屏切换 真机测试 扩展 远程调试工具 vorlon js 多终端调试工具 brows
  • sql注入之报错注入

    报错注入 报错注入在没法用union联合查询时用 但前提还是不能过滤一些关键的函数 报错注入就是利用了数据库的某些机制 人为地制造错误条件 使得查询结果能够出现在错误信息中 这里主要记录一下xpath语法错误和concat rand gro
  • JVM三大子系统之类加载子系统(二)

    前置说明 由于个人能力有限 下面文章会大量整理 引用其他人的文章 我个人主要把这篇文章当成是自己的学习笔记 通过前面的文章 我们知道了 一段java代码是如何运行的 1 编译 程序员编写的java文件 编译成 class文件 2 加载 JV
  • 2027 转换字符串的最少操作次数

    题目描述 给你一个字符串 s 由 n 个字符组成 每个字符不是 X 就是 O 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 O 注意 如果字符已经是 O 只需要保持 不变 返回将 s 中所有字符均转换为 O 需
  • Angular2 http模块

    1 Http简介 互联网是构建在网络通讯协议的基础上 所有的信息 不管是音频 视频 图片 声音还是文本 都是通过网络进行传输 网站开发过程不可避免的会接触位于应用层的http https协议 这两种协议是构建与TCP IP的基础之上 RFC
  • 时序预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 时间序列流量的预测问题是近年来机器学习的一个热点问题 通过改变长短期记忆网络 LST
  • 如何查看mysql 的用户名和密码

    如何查看mysql 的用户名和密码 首先 这个是内部查看 意思就是登录了查看的 windo r 输入cmd 2 切换到 mysql bin 目录 3 登录 4 查看命令 select from mysql user
  • Ubuntu 16.04 Java8 安装

    添加ppa sudo add apt repository ppa webupd8team java sudo apt get update 安装oracle java installer sudo apt get install orac
  • Java class 中public、protected 、friendly、private的区别

    Java class 中public protected friendly private的区别 1 类 class 可见性修饰符 public 在所有类中可见 在其他包中可以用import导入 缺省 就是没有修饰符 在同一个包中的类中可见
  • CSS设置视频背景透明

    background 000 mix blend mode screen
  • git无法连接远程仓库(GitHub)

    问题描述 某一天 开开心心的写完了一篇博客 在向GitHub推送的时候突然报错了 乍一看 报错了 顿时 通过查阅资料尝试了几种方法之后解决了 在这做个记录 解决方法 首先需要检查一下SSH是否能够连接成功 输入以下命令 ssh T git
  • 已创建了一个包含学生学号、身高、性别的学生身高信息表并输出到屏幕,学生信息从records.txt文件读取。 编写一个函数 void reverse(Seqlist *lp); 功能是对已建立的学生身

    已创建了一个包含学生学号 身高 性别的学生身高信息表并输出到屏幕 学生信息从records txt文件读取 结构体数组版本 1 30 编写一个函数 void reverse Seqlist lp 功能是对已建立的学生身高信息表进行倒置 结果
  • 实验七、文件系统

    1 为 Ext4 文件系统添加扩展属性 扩展属性分为以下四种 1 扩展的安全属性 security 安全属性名称空间被内核用于安全模块 例如SELinux 对安全属性的读和写权限依赖于策略的设定 这策略是由安全模块载入的 如果没有载入安全模
  • 【记录】批处理文件提取 (2020.8.26)

    写在前面 文件的批处理可以帮我们节约大量的时间及精力 最近网上冲浪的时候找到一些不错的资源 赶紧保存 但是下载下来后发现资源实在是太套娃了 虽说是全集不假 但是一层套着一层 让人心累 想到批处理的方法 能不能用脚本帮我把文件都提取出来呢 说
  • 持续自适应信任(CAT)-企业零信任最佳范式|身份云研究院

    零信任安全治理理念不再是陌生的话题 随着社会面临更复杂的信息安全风险 不断变化的网络环境使得基于边界的安全架构不再具备抵御内外部安全威胁的能力 传统的以网络中心化的安全体系架构也逐步过渡到以身份为中心的网络访问控制理念 基于零信任理念衍生的
  • windows下以指定用户访问SMB服务器进行读写

    一 概述 最近遇到一个问题 linux 的 smb服务器开启匿名访问 windows访问linux文件夹不需要用户名密码就可以进去使用 但是存在一个问题 ssh连接到linux 后修改的文件 在windows已smb方式下打开某个文件修改

随机推荐

  • 【文献翻译】信息安全管理自动化的可能性 - Automation possibilities in information security management

    摘要 ISO 27001中定义的信息安全管理涉及建立 实施 操作 监控 审查 维护和改进信息安全管理系统 本文分析了信息安全管理自动化的可能性 该分析考虑了使用 i 风险管理中的安全本体 ii 用于某些安全控制自动运行的硬件和软件系统 以及
  • JVM3-类文件结构

    六 类文件结构 计算机到目前为止 都只能识别0和1 所以我们写的程序都需要被编译器翻译成0和1的二进制格式才能被计算机执行 很多程序语言选择了与操作系统和机器指令集无关的 平台中立的格式作为程序编译后的格式 而不再需要像最初那样把程序编译成
  • PMP课程笔记:第4章 项目整合管理

    目录 预测型生命周期 0 项目整合管理的基本概念 1 项目整合管理 2 整合的发展趋势 3 项目管理过程三从四德 4 项目整合管理实现过程 重要 1 制定项目章程 1 1 制定项目章程 输入 1 2 制定项目章程 输出 1 3 制定项目章程
  • 使用RPC对某者web端骑行数据进行爬取

    使用RPC技术hook web端JS 骑行app某者web端爬虫 2022 2 1 获取轨迹ID 通过更改年月 可以发现获取每个月轨迹ID 的方式 这个非常简单 只需要拷贝请求头headers就可以直接获取 2 获取轨迹详情 可以发现三个请
  • 主键和唯一索引

    主键和唯一索引 主键 主关键字 primary key 是表中的一个或多个字段 它的值用于唯一地标识表中的某一条记录 唯一索引 一种索引 不允许具有索引值相同的行 从而禁止重复的索引或键值 系统在创建该索引时检查是否有重复的键值 并在每次使
  • 【生信原理】初探芯片表达谱分析

    初探芯片表达谱分析 文章目录 初探芯片表达谱分析 实验目的 实验内容 实验题目 实验过程 数据的获取 解压与读取 数据预处理 背景纠正 标准化和探针信号汇总等 数据过滤 探针过滤 探针注释 添加基因注释信息 limma差异分析 差异表达基因
  • DM备份数据或者还原备份管道连接超时问题。

    问题 第一 必须以dmdba的用户执行 第二 启动DmAPService 服务 启动失败了 删掉管道文件再启动 启动成功 再执行就OK了
  • 【华为OD机试 2023 B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • linux C程序中获取shell脚本输出

    linux C程序中获取shell脚本输出 分类 linux C开发 2008 06 16 22 44 820人阅读 评论 0 收藏 举报 shell 脚本 linux c system cmd 目录 linux C程序中获取shell脚本
  • 【业务功能篇78】微服务-前端后端校验- 统一异常处理-JSR-303-validation注解

    5 前端校验 我们在前端提交的表单数据 我们也是需要对提交的数据做相关的校验的 Form 组件提供了表单验证的功能 只需要通过 rules 属性传入约定的验证规则 并将 Form Item 的 prop 属性设置为需校验的字段名即可 校验的
  • socket局域网测试是可以的,但是在腾讯云/阿里云上报错“[Errno 99] Cannot assign requested address”

    现在云服务器一般都是只有内网地址 通过公网IP访问时 由云服务器运营商映射到内部网络的 因此 如果部署socket服务时 配置server ip应该是内网IP 解决方法 服务端的ip填服务器的私网ip 客户端填公网ip
  • 【Django】Python+Django 图文教程

    Django新手图文教程 本文面向 有python基础 刚接触web框架的初学者 环境 windows7 python3 5 1 pycharm专业版 Django 1 10版 pip3 一 Django简介 百度百科 开放源代码的Web应
  • 字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...

    先说下我基本情况 本科不是计算机专业 现在是学通信 然后做图像处理 可能面试官看我不是科班出身没有问太多计算机相关的问题 因为第一次找工作 字节的游戏专场又是最早开始的 就投递了 投递的是游戏测试开发岗 字节是自己投的第一家公司 也是第一家
  • 【NLP】通过迁移学习加速 AI 模型训练

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Java机试题

    整理自Java经典编程50题 面试笔试机试 腾讯云开发者社区 腾讯云 1 回文数 public static boolean palindrom Integer integer String str1 String valueOf inte
  • Kibana在Centos上开机启动

    1 需要下载kibana 去官网下 2 解压到自己指定的目录下 我是放到了 usr local下 3 执行 vi usr lib systemd system kibana service 插入下面内容 Unit Description k
  • /dev/zero和/dev/null的区别

    可以通过使用dd if dev zero of archive test dbf bs 8k count 1000000 来测试磁盘的纯写入性能 使用dd if file of dev null 来测试磁盘的纯读取性能 使用dd if fi
  • 紫光同创 FPGA 开发跳坑指南(三)—— 联合 Modelsim 仿真

    Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具 主要用于验证数字电路设计是否正确 紫光 Pango Design Suite 开发套件支持联合 Modelsim 仿真 这里作简要的介绍 添加仿真库 方法一 打开 Pang
  • 实现mint操作(参考pancake)

    区块链发展越来越好 nft已经火了很久 今天写一下如何用js web3js 调用合约 实现mint nft 简单的调用 引入一些依赖 根据需要 有一些是其他功能的 import useActiveWeb3React from web3 ho
  • mysql read loop_mysql数据库游标的使用

    Mysql在5 0版本支持在存储过程中使用游标 游标声明必须出现在处理程序声明变量和条件的声明后 游标的使用如下 CREATE PROCEDURE curdemo BEGIN DECLARE done INT DEFAULT FALSE D