iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql:存储过程-游标遍历
  • 230
分享到

mysql:存储过程-游标遍历

java后端mysqlsql 2023-09-27 14:09:24 230人浏览 泡泡鱼
摘要

前情提要 因工作需要要写一些sql脚本,进行一些数据的修改。 直接在数据库ide中写sql涉及就到一些逻辑的判断。 比如判断根据参数判断这条数据存不存在,不存在插入,存在则删除。 最开始查搜索引擎Mysql是支持if判断的,根据格式写完

前情提要

因工作需要要写一些sql脚本,进行一些数据的修改。

直接在数据库ide中写sql涉及就到一些逻辑的判断。

比如判断根据参数判断这条数据存不存在,不存在插入,存在则删除。

最开始查搜索引Mysql是支持if判断的,根据格式写完sql也不能执行会报错。经过更细致的学习,发现如果要在mysql中进行一些逻辑判断,需要定义存储过程,相当于一些函数,就可以实现一些逻辑判断或者循环。

下面进入正式学习:


1.存储过程书写格式

DELIMITER $$CREATE PROCEDURE my_procedure()BEGIN    -- Statement 1    -- Statement 2END $$DELIMITER ;

根据格式就可以定义存储过程,写一些需要的逻辑,增删改查

存储过程还可以传递参数并且也可以定义变量,如下例

DELIMITER $$CREATE PROCEDURE my_procedure(IN param1 INT, OUT param2 INT)BEGIN    -- Declare an internal variable    DECLARE var1 INT;    -- PerfORM some calculations using the input parameter    SET var1 = param1 * 2;    -- Update the output parameter with the result    SET param2 = var1;    -- You can perform more statements here, if needed    -- ...    -- The stored procedure will return automatically after this blockEND $$DELIMITER ;

2.存储过程的使用

执行存储过程:

Call my_procedure(1,2) ;

 删除执行过程:

DROP PROCEDURE IF EXISTS my_precedure;

3.存储过程执行业务逻辑

(1)逻辑判断:

IF NOT EXISTS (SELECT 1FROM my_table mtWHERE-- 可以使用存储过程传入的参数param1 mt.id = param1) THEN-- 不存在,插入新数据 INSERT INTO my_table (id,code,name)VALUES (null,code,name);END IF;

(2)循环判断:

存储过程可以使用LOOP语句来实现循环。以下是一个简单的MySQL存储过程例子,演示如何使用LOOP循环来计算某个数的阶乘:

DELIMITER $$CREATE PROCEDURE calculate_factorial(IN number INT, OUT result INT)BEGIN    DECLARE counter INT DEFAULT 1;    DECLARE factorial INT DEFAULT 1;    -- Check if the input number is negative or zero    IF number <= 0 THEN        SET result = 1;        LEAVE calculate_factorial;    END IF;    -- Loop to calculate the factorial    factorial_loop: LOOP        SET factorial = factorial * counter;        SET counter = counter + 1;        -- Exit the loop when counter reaches the input number + 1        IF counter > number + 1 THEN            LEAVE factorial_loop;        END IF;    END LOOP factorial_loop;    SET result = factorial;END $$DELIMITER ;

(3)查询数据并遍历

-- 创建通用的存储过程:将指定表的自定义列分配给特定用户CREATE PROCEDURE assign_columns_to_user(IN param1 INT, IN param2 INT)BEGIN    DECLARE colId INT;    DECLARE colName VARCHAR(255);    DECLARE colDescription VARCHAR(255);    -- 声明游标,用于遍历数据集    DECLARE cur CURSOR FOR        SELECT            column_id AS colId,            column_name AS colName,            column_description AS colDescription        FROM            your_table        WHERE            domain_id = param1;    -- 声明异常处理程序    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1;    -- 打开游标    OPEN cur;    -- 初始化完成标志    SET @finished = 0;    loop_start: LOOP        -- 读取游标数据        FETCH cur INTO colId, colName, colDescription;        -- 判断是否读取到数据或已完成        IF @finished = 1 THEN            LEAVE loop_start;        END IF;        -- 检查数据是否已分配给用户        IF NOT EXISTS (            SELECT 1            FROM your_table_assign            WHERE column_id = colId AND user_id = param2        ) THEN            -- 不存在,插入新数据            INSERT INTO your_table_assign (assign_id, user_id, column_id, column_name, column_description, assigned_flag, domain_id)            VALUES (NULL, param2, colId, colName, colDescription, 1, param1);        END IF;    END LOOP loop_start;    -- 关闭游标    CLOSE cur;END;

上述代码从your_table表中查询数据使用‘游标’进行循环遍历,利用‘游标’拿到遍历参数后,判断分配表是否存在,不存在则利用参数创建新的数据插入

注:

使用游标过程中可会遇到 No data - zero rows fetched, selected, or processed sql错误

在上述里例子中声明异常处理程序可以规避这个问题

-- 声明异常处理程序
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1;

 在游标遍历完数据后,能捕获到这个异常,跳出循环。

来源地址:https://blog.csdn.net/weixin_63656510/article/details/131959842

您可能感兴趣的文档:

--结束END--

本文标题: mysql:存储过程-游标遍历

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

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

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

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

下载Word文档
猜你喜欢
  • mysql:存储过程-游标遍历
    前情提要 因工作需要要写一些sql脚本,进行一些数据的修改。 直接在数据库ide中写sql涉及就到一些逻辑的判断。 比如判断根据参数判断这条数据存不存在,不存在插入,存在则删除。 最开始查搜索引擎mysql是支持if判断的,根据格式写完...
    99+
    2023-09-27
    java 后端 mysql sql
  • mysql存储过程中游标怎样遍历
    这篇文章主要介绍了mysql存储过程中游标怎样遍历,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql存储过程中游标遍历的方法:首先取值,取...
    99+
    2024-04-02
  • MYsql-存储过程-游标的嵌套
    在ITPUB: http://www.itpub.net/viewthread.phptid=1134085&pid=13049789&page=1&extra=#pid13049789上有人发贴说游标不...
    99+
    2024-04-02
  • MySQL-存储过程、流程控制、游标
    存储过程 存储过程概述 1.产生背景 开发过程总,经常会遇到重复使用某一功能的情况 2.解决办法 MySQL引人了存储过程(Stored Procedure)这一技术 3.存储过程 存储过程就是一条或...
    99+
    2023-10-11
    sql
  • mysql存储过程中游标怎么用
    这篇文章将为大家详细讲解有关mysql存储过程中游标怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 DELIMITER $$USE `...
    99+
    2024-04-02
  • mysql数据库存储过程之游标(光标cursor)
    游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和close。 一、语法。 #声明游标declare 游标名称 cursor for 查询语句;#开启游...
    99+
    2023-09-02
    数据库 sql
  • mysql存储过程的游标有什么作用
    这篇文章主要讲解了“mysql存储过程的游标有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql存储过程的游标有什么作用”吧! ...
    99+
    2024-04-02
  • 如何在mysql存储过程中使用游标
    本篇文章给大家分享的是有关如何在mysql存储过程中使用游标,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在处理存储过程中的结果集时,可以使用...
    99+
    2024-04-02
  • MySql存储过程和游标的使用实例
    目录前言1.创建存储过程。2.查看存储过程名称3.调用存储过程4.删除存储过程总结前言 这里存储过程和游标的定义和作用就不介绍了,网上挺多的,只通过简单的介绍,然后用个案例让大家快速...
    99+
    2024-04-02
  • mysql存储过程之遍历设置表中某些字段值
    缘起 ​ mysql数据库中有用到分表,大概300张表,都是以geo_data_xxxxxx来命名,之前测试过程中,有给300张表中的一个字段设置过值,但是想重新生成一遍数据。那么后面是做了一个数据清洗,给300张表is_turnout字段...
    99+
    2023-08-30
    mysql
  • mysql的存储过程、游标 、事务有什么用
    这篇文章给大家分享的是有关mysql的存储过程、游标 、事务有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql的存储过程、游标 、事务实例详解下面是自己曾经编写过的...
    99+
    2024-04-02
  • oracle存储过程游标怎么使用
    在Oracle存储过程中,使用游标可以迭代访问结果集。以下是使用游标的一般步骤:1. 声明游标:在存储过程的声明部分,使用`CURS...
    99+
    2023-09-21
    oracle
  • oracle存储过程的游标是什么
    Oracle存储过程中的游标是一种用于遍历和访问查询结果集的数据库对象。游标可以被认为是指向某个查询结果集的指针,通过游标可以逐行地...
    99+
    2023-08-24
    oracle
  • MySQL中怎么通过游标与LOOP循环遍历结果集
    在MySQL中,可以使用游标和LOOP循环来遍历结果集。以下是一个示例: DELIMITER // DROP PROCED...
    99+
    2024-04-30
    MySQL
  • SQL利用游标遍历日期查询的过程详解
    需求:我有个存储过程,每次执行需要带入一个连续的日期。我想遍历执行出一个月的时间,怎么搞? 我本来的想法是:程序里面写一个for循环,循环里面循环传日期去执行这个存储过程。 但是同事...
    99+
    2024-04-02
  • MySQL存储过程详解 mysql 存储过程
    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Proce...
    99+
    2024-04-02
  • 怎么使用mysql游标遍历结果集
    使用MySQL游标遍历结果集可以按照以下步骤进行: 声明一个游标变量,并将查询结果赋值给游标变量。 使用DECLARE语句声明游标...
    99+
    2024-02-29
    mysql
  • oracle存储过程中游标怎么使用
    在Oracle存储过程中,可以使用游标来处理查询结果集。游标允许逐行处理查询结果,类似于使用指针遍历数据。以下是在Oracle存储过...
    99+
    2023-09-09
    oracle
  • MYSQL存储过程开发中怎么使用游标嵌套
    本篇内容介绍了“MYSQL存储过程开发中怎么使用游标嵌套”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在实...
    99+
    2024-04-02
  • MySQL之存储过程
    我的小站:我的博客 1.1 存储过程简介 存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数的值 MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedur...
    99+
    2023-09-02
    数据库 mysql sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作