在mysql存储过程中间部分,使用游标遍历动态结果集(游标动态传参使用)

mysql游标动态传参实现(动态游标)

  • 1.问题
  • 2.需求描述
  • 3.实现
    • 3.1.使用
    • 3.2.代码(直接看这都可以)

1.问题

  众所周知,mysql存储过程功能是没有oracle的包功能强大的,但是在去O的趋势下,mysql存储过程的编写还是要掌握的。今天在编写mysql存储过程的时候,就遇到一个问题,可能是先入为主的思想,同事之前说过:mysql的存储过程很难用,游标都不能使用oracle那种动态传参实现动态遍历结果集内容。我也就一直以为mysql的邮编只能在begin的DECLARE最后的部分进行一次确切的sql声明,但是很多时候我并不能事先确定每一个字段的范围,这样游标就很鸡肋了。搜了许久没有找到相关博库,难道是我搜索方式不对?那我就来水一篇博客了~

2.需求描述

  现在想要在存储过程中间遍历某个游标,这个游标实际是查一个表ib_tbs_prepareduty ,这个表有一个ftaskid字段,这个字段的值我不能在声明游标的时候确定,我可能在存储过程中间某一部分处理后才能得到,这个时候我们该怎么declare游标,又怎么让游标准确拿到这部分我想要的记录呢?
  如果是oracle就好了,我可以像函数一样定义游标,然后open游标,接着遍历就可以了。

DECLARE    
   r_emp    emp%ROWTYPE;           --该类型为emp表中一行的类型   
   cursor c_emp(v_no number) is SELECT * FROM emp where deptno = v_no;   
BEGIN   
  OPEN c_emp(20);   --给v_no传参20
  LOOP   
     FETCH c_emp into r_emp ;       --游标中查询出来的一行into进定义的变量r_emp中   
     EXIT WHEN c_emp%NOTFOUND;   
     dbms_output.put_line('员工姓名:' || r_emp.ename );      
  END LOOP;   
  CLOSE c_emp;  
END;

3.实现

3.1.使用

  其实,mysql的游标也是可以传参数的,只不过定义和传参的时候和oracle的带参数的游标有一点不同,但是使用的时候就和普通的静态游标一模一样了。
  首先是定义:
在这里插入图片描述
  接着是或者@parameter并赋值,然后游标在open的时候就会执行具体的sql,拿到我们要的结果集,最后使用循环进行遍历就可以了。
在这里插入图片描述
  起始就是比静态游标的时候多一个传参,比如倒数第二个游标cur_bq就是静态游标:
在这里插入图片描述
  废话不多说,直接上代码:

3.2.代码(直接看这都可以)

CREATE DEFINER=`root`@`%` PROCEDURE `p_prepareduty`({你的入参和出参数})
BEGIN
    #下面定义一些变量用来存你要从游标中取出的字段内容
	DECLARE for_i int DEFAULT 0;
	DECLARE cur_fid VARCHAR(50);
	DECLARE cur_fdate date;
	DECLARE cur_fcityno VARCHAR(20);
	DECLARE cur_foverseas VARCHAR(200);
	DECLARE cur_freason VARCHAR(50);
	DECLARE cur_fspecial text;
	DECLARE var_ftaskid VARCHAR(50);#你的其他变量
	DECLARE done INT DEFAULT 0;#用于退出LOOP循环
	
	#DECLARE最后部分是定义你的游标,可以定义静态和动态游标
	declare cur_bq cursor for 
					select fid,fdate,fcityno,foverseas,freason,fspecial from ib_tbs_prepareduty 
					where ftaskid = ls_ftaskid and fempid = ls_fempid and fifvalid = '1';#静态
	declare cur_lastbq cursor for 
					select fcityno,foverseas,freason,fspecial from ib_tbs_prepareduty 
					where fempid = ls_fempid and fifvalid = '1' and ftaskid = @parameter;#动态
					#@parameter是域变量,也就是游标的参数
	declare continue handler for not found set done = 1;

	{这里处理你的业务,并且获得你需要的@parameter的值}
	#下面演示动态游标使用
	SET @parameter= var_ftaskid;#给动态游标传参
	open cur_lastbq;#打开游标
	read_loop:LOOP#循环遍历
			fetch cur_lastbq into cur_fcityno,cur_foverseas,cur_freason,cur_fspecial;#取出你要的字段
			IF done = 1 THEN LEAVE read_loop;
			END IF;#游标遍历完后退出循环
			{你的其他操作}
	END LOOP read_loop;  
	close cur_lastbq;#关闭游标

	#下面演示静态游标使用
	open cur_bq;
	lable1:loop
			fetch cur_bq into cur_fid,cur_fdate,cur_fcityno,cur_foverseas,cur_freason,cur_fspecial;
			IF done = 1 THEN LEAVE lable1;
			END IF;
			{你的其他操作}
	end loop lable1;
	close cur_bq;
END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/190021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用git下载远程所有分支到本地

使用git下载远程所有分支到本地: 打开gitbash 输入以下命令即可: git clone git地址 cd git文件夹 git branch -r | grep -v \-> | while read remote; do git branch --track "${remote#origin/}" "$remote"; done git fetch -…

灭火器二维码巡检卡制作教程

每个消防器材生成独立二维码,取代传统纸质巡检卡,微信扫码巡检,巡检记录汇总后台,随时登录后台查看导出数据,管理人员绑定凡尔码小程序即可随时了解消防巡检完成情况。 生成灭火器巡检码流程图: 1、开通后…

百家号MCN是什么?百家号MCN禁止拉子账号怎么解决?

在当今数字化时代,社交媒体平台已成为人们获取信息、分享观点和创作内容的重要渠道之一。百家号作为百度旗下的自媒体平台,吸引了众多创作者和机构入驻,以分享优质内容并获得收益。在百家号上,MCN矩阵扮演着重要的角色&#xff0c…

目标检测原理

一、什么是目标检测 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定他们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状、姿态,再加上光照、遮挡等因素的干扰,目…

如何在Node.js和Express中设置TypeScript(2023年)

如何在Node.js和Express中设置TypeScript(2023年) 在这篇文章中,我们将介绍在Express应用程序中设置TypeScript的最佳方法,了解与之相关的基本限制。 文章目录 如何在Node.js和Express中设置TypeScript(2023年&#x…

RT-DETR 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU

文章目录 更换方式CIoUDIoUEIoUGIoUSIoUWIoUFocal_CIoUFocal_DIoUFocal_EIoUFocal_GIoUFocal_SIoU提示更换方式 第一步:将ultralytics/ultralytics/utils/metrics.py文件中的bbox_iou替换为如下的代码:class

图书管理系统源码,图书管理系统开发,图书借阅系统源码三框架设计原理和说明

TuShuManger项目简介和创建 这里一共设计了6个项目,主要是借助三层架构思想分别设计了主要的三层,包括model实体层,Dal数据库操作层,Bll业务调用层,其他有公共使用项目common层,DButitly提取出来的数据库访问层,下面我们分别创建每个项目和开始搭建整个过程 TuShuManger…

第二十一章 解读XML与JSON文件格式(工具)

XML 带分隔符的文件仅有两维的数据:行 & 列。如果我们想在程序之间交换数据结构,需要一种方法把层次结构,序列,集合和其它的数据结构编码成文本。 今天要说的 XML 是最突出的处理上述这种转换的标记格式,它使用标…

【深度学习】如何找到最优学习率

经过了大量炼丹的同学都知道,超参数是一个非常玄乎的东西,比如batch size,学习率等,这些东西的设定并没有什么规律和原因,论文中设定的超参数一般都是靠经验决定的。但是超参数往往又特别重要,比如学习率&a…

Seurat Tutorial 1:标准分析流程,基于 PBMC 3K 数据集

目录 1 设置 Seurat 对象2 标准预处理工作流程 2.1 QC 和选择细胞进行进一步分析3 数据归一化4 识别高变特征(特征选择)5 标准化数据6 执行线性降维7 确定数据集的维度8 细胞聚类9 运行非线性降维 (UMAP/tSNE)10 寻找差异表达特征(cluster b…

OSG编程指南<十二>:OSG二三维文字创建及文字特效

1、字体基础知识 适当的文字信息对于显示场景信息是非常重要的。在 OSG 中,osgText提供了向场景中添加文字的强大功能,由于有第三方插件 FreeType 的支持,它完全支持TrueType 字体。很多人可能对 FreeType 和 TrueType 还不太了解&#xff0c…

小程序项目:springboot+vue基本微信小程序的宠物领养系统

项目介绍 当今科技发展迅速,交通环境也变得越来越复杂。人们的出行方式变得多元化,这给视障人士带来了一定的困扰。而导盲犬可以帮助视障人士外出行走,提高他们的生活质量。在我国,导盲犬的数量远远少于视障人士的数量。由于导盲…

WPF绘图技术介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 WPF绘图基本用法绘制直线在XAML中绘制直线在C#代码中绘制直线使用Path绘制直线注意 矩形绘制在XAML中绘制矩形在C#代码中绘制矩形设置矩形的位…

<JavaEE> Java中线程有多少种状态(State)?状态之间的关系有什么关系?

目录 一、系统内核中的线程状态 二、Java中的线程状态 一、系统内核中的线程状态 状态说明就绪状态线程已经准备就绪,随时可以接受CPU的调度。阻塞状态线程处于阻塞等待,暂时无法在CPU中执行。 二、Java中的线程状态 相比于系统内核,Java…

火锅店管理系统外卖点餐配送小程序的效果

火锅是餐饮行业重要的组成部分,在每个地方都受到追捧,其从业商家众多,头部连锁品牌也不少,近些年行业市场规模也一直增加,而随着消费升级及数字化转型,传统火锅店经营痛点不少: 火锅店的需求非…

智能优化算法应用:基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蚁狮算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

SpringBoot中如何优雅地使用重试

1 缘起 项目中使用了第三方的服务, 第三方服务偶尔会出现不稳定、连接不上的情况, 于是,在调用时为了保证服务的相对高可用,添加了超时连接重试, 当连接第三方服务超时时,多重试几次,比如3次&a…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-7:软件定时器)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

Python大数据考题

Python大数据考题&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要…
最新文章