iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何在mysql存储过程中使用游标
  • 715
分享到

如何在mysql存储过程中使用游标

2024-04-02 19:04:59 715人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关如何在Mysql存储过程中使用游标,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在处理存储过程中的结果集时,可以使用

本篇文章给大家分享的是有关如何在Mysql存储过程中使用游标,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的游标为只读,不可滚动和敏感三种模式,我们来看下:

  • 只读:无法通过光标更新基础表中的数据。

  • 不可滚动:只能按照select语句确定的顺序获取行。不能以相反的顺序获取行。 此外,不能跳过行或跳转到结果集中的特定行。

  • 敏感:有两种游标:敏感游标和不敏感游标。敏感游标指向实际数据,不敏感游标使用数据的临时副本。敏感游标比一个不敏感的游标执行得更快,因为它不需要临时拷贝数据。但是,对其他连接的数据所做的任何更改都将影响由敏感游标使用的数据,因此,如果不更新敏感游标所使用的数据,则更安全。 Mysql游标是敏感的。

我们可以在存储过程,存储函数和触发器中使用MySQL游标,咱们先来看下使用DECLARE语句声明的语法:

DECLARE cursor_name CURSOR FOR SELECT_statement;

我们要注意下,游标声明必须在变量声明之后。如果在变量声明之前声明游标,mysql将会发出一个错误,另外游标必须始终与SELECT语句相关联。完事呢,我们来使用OPEN语句打开游标。OPEN语句初始化游标的结果集,因此我们必须在从结果集中提取行之前调用OPEN语句:

OPEN cursor_name;

然后,我们来使用FETCH语句来检索光标指向的下一行,并将光标移动到结果集中的下一行:

FETCH cursor_name INTO variables list;

之后,我们就可以检查是否有任何行记录可用,然后再提取它。完事最后还要记得调用CLOSE语句来停用光标并释放与之关联的内存:

CLOSE cursor_name;

我们要知道,当光标不再使用时,应该关闭它。当我们使用mysql游标时,还必须声明一个NOT FOUND处理程序来处理当游标找不到任何行时的情况。 因为每次调用FETCH语句时,游标会尝试读取结果集中的下一行。 当光标到达结果集的末尾时,它将无法获得数据,并且会产生一个条件。NOT FOUND处理程序用于处理这种情况,我们来看下它的语法结构:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

finished是一个变量,指示光标到达结果集的结尾。请注意,处理程序声明必须出现在存储过程中的变量和游标声明之后。我们再来看下mysql游标的运行原理图:

如何在mysql存储过程中使用游标

咱们接下来,就要开发一个存储过程用来获取employees表中所有员工的电子邮件列表。我们先来声明一些变量,一个用于循环员工电子邮件的游标和一个NOT FOUND处理程序:

DECLARE finished INTEGER DEFAULT 0;
DECLARE email varchar(255) DEFAULT "";
-- declare cursor for employee email
DEClARE email_cursor CURSOR FOR
 SELECT email FROM employees;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
接下来,使用OPEN语句打开email_cursor:
OPEN email_cursor;

然后,迭代电子邮件列表,并使用分隔符(;)连接每个电子邮件:

get_email: LOOP
 FETCH email_cursor INTO v_email;
 IF v_finished = 1 THEN
 LEAVE get_email;
 END IF;
 -- build email list
 SET email_list = CONCAT(v_email,";",email_list);
END LOOP get_email;

之后,我们在循环中,使用v_finished变量来检查列表中是否有任何电子邮件来终止循环,完事呢,使用CLOSE语句关闭游标:

CLOSE email_cursor;

我们来看下build_email_list存储过程所有代码:

DELIMITER $$
CREATE PROCEDURE build_email_list (INOUT email_list varchar(4000))
BEGIN
 DECLARE v_finished INTEGER DEFAULT 0;
    DECLARE v_email varchar(100) DEFAULT "";
 -- declare cursor for employee email
 DEClARE email_cursor CURSOR FOR
 SELECT email FROM employees;
 -- declare NOT FOUND handler
 DECLARE CONTINUE HANDLER
    FOR NOT FOUND SET v_finished = 1;
 OPEN email_cursor;
 get_email: LOOP
 FETCH email_cursor INTO v_email;
 IF v_finished = 1 THEN
 LEAVE get_email;
 END IF;
 -- build email list
 SET email_list = CONCAT(v_email,";",email_list);
 END LOOP get_email;
 CLOSE email_cursor;
END$$
DELIMITER ;

我们来使用以下脚本测试build_email_list存储过程:

SET @email_list = "";
CALL build_email_list(@email_list);
SELECT @email_list;

以上就是如何在mysql存储过程中使用游标,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何在mysql存储过程中使用游标

本文链接: https://www.lsjlt.com/news/55777.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在mysql存储过程中使用游标
    本篇文章给大家分享的是有关如何在mysql存储过程中使用游标,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在处理存储过程中的结果集时,可以使用...
    99+
    2022-10-18
  • MySQL存储过程和游标
    一、存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。什么是存储过程:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样...
    99+
    2019-12-05
    MySQL存储过程和游标
  • mysql存储过程中游标怎么用
    这篇文章将为大家详细讲解有关mysql存储过程中游标怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 DELIMITER $$USE `...
    99+
    2022-10-18
  • mysql:存储过程-游标遍历
    前情提要 因工作需要要写一些sql脚本,进行一些数据的修改。 直接在数据库ide中写sql涉及就到一些逻辑的判断。 比如判断根据参数判断这条数据存不存在,不存在插入,存在则删除。 最开始查搜索引擎mysql是支持if判断的,根据格式写完...
    99+
    2023-09-27
    java 后端 mysql sql
  • MySql存储过程和游标的使用实例
    目录前言1.创建存储过程。2.查看存储过程名称3.调用存储过程4.删除存储过程总结前言 这里存储过程和游标的定义和作用就不介绍了,网上挺多的,只通过简单的介绍,然后用个案例让大家快速...
    99+
    2022-11-13
  • MYsql-存储过程-游标的嵌套
    在ITPUB: http://www.itpub.net/viewthread.phptid=1134085&pid=13049789&page=1&extra=#pid13049789上有人发贴说游标不...
    99+
    2022-10-18
  • MySQL-存储过程、流程控制、游标
    存储过程 存储过程概述 1.产生背景 开发过程总,经常会遇到重复使用某一功能的情况 2.解决办法 MySQL引人了存储过程(Stored Procedure)这一技术 3.存储过程 存储过程就是一条或...
    99+
    2023-10-11
    sql
  • mysql存储过程中游标怎样遍历
    这篇文章主要介绍了mysql存储过程中游标怎样遍历,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql存储过程中游标遍历的方法:首先取值,取...
    99+
    2022-10-18
  • oracle存储过程中游标怎么使用
    在Oracle存储过程中,可以使用游标来处理查询结果集。游标允许逐行处理查询结果,类似于使用指针遍历数据。以下是在Oracle存储过...
    99+
    2023-09-09
    oracle
  • MYSQL存储过程开发中怎么使用游标嵌套
    本篇内容介绍了“MYSQL存储过程开发中怎么使用游标嵌套”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在实...
    99+
    2022-10-18
  • 如何在mysql中使用存储过程
    如何在mysql中使用存储过程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中...
    99+
    2022-10-18
  • oracle存储过程游标怎么使用
    在Oracle存储过程中,使用游标可以迭代访问结果集。以下是使用游标的一般步骤:1. 声明游标:在存储过程的声明部分,使用`CURS...
    99+
    2023-09-21
    oracle
  • mysql存储过程的游标有什么作用
    这篇文章主要讲解了“mysql存储过程的游标有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql存储过程的游标有什么作用”吧! ...
    99+
    2022-10-19
  • oracle中创建存储过程,以及存储过程中调用游标
    CREATE OR REPLACE PROCEDURE aa is   CURSOR prodCombind_cur IS SELECT * FROM proddata...
    99+
    2022-10-18
  • Mysql 存储过程中使用游标循环读取临时表
    游标 游标(Cursor)是用于查看或者处理结果集中的数据的一种方法。游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。 游标的使用方式 定义游标:Declare 游标名称 CURSOR for ta...
    99+
    2022-06-01
    MySQL 游标 MySQL 读取临时表
  • mysql数据库存储过程之游标(光标cursor)
    游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和close。 一、语法。 #声明游标declare 游标名称 cursor for 查询语句;#开启游...
    99+
    2023-09-02
    数据库 sql
  • mysql的存储过程、游标 、事务有什么用
    这篇文章给大家分享的是有关mysql的存储过程、游标 、事务有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql的存储过程、游标 、事务实例详解下面是自己曾经编写过的...
    99+
    2022-10-18
  • 创建一个 MySQL 存储过程,使用游标从表中获取行?
    以下是一个存储过程,它从具有以下数据的表“student_info”的名称列中获取记录 -mysql> Select * from Student_info; +-----+---------+------------+--...
    99+
    2023-10-22
  • 通用游标分页存储过程PageSplit
    ALTER procedure [dbo].[PageSplit] @sql varchar(max),--要执行的sql语句 @page int=1, --要显示的页码 @pageSize i...
    99+
    2022-10-18
  • MySQL中如何使用存储过程
    这篇文章将为大家详细讲解有关MySQL中如何使用存储过程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 使用CallableStatemen...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作