MySQL存储过程使用游标循环数据列表
本篇文章主要讲解,我的一个案例,使用存储过程和游标循环数据列表,并且做一些操作,比如保存一些数据,修改一些数据;
1、需求?
MySQL使用存储过程循环数据列表?
2、先描述下MySQL有哪些循环的语法
while循环
CREATE PROCEDURE proc_while ()
BEGINDECLARE num INT ;SET num = 0 ;WHILE num < 10 DOSELECTnum ;SET num = num + 1 ;END WHILE ;END
repeat循环
CREATE PROCEDURE proc_repeat ()
BEGINDECLARE i INT ;SET i = 0 ;repeatselect i;set i = i + 1;until i >= 5end repeat;END
loop循环
BEGINdeclare i int default 0;loop_label: loopset i=i+1;if i<8 theniterate loop_label;end if;if i>=10 thenleave loop_label;end if;select i;end loop loop_label;END
3、循环语法已经介绍,现在给出具体案例代码了
3.1、先删除已经存在的临时表和存储过程
drop table TempNoIntroAgent;
drop table TempNoBelongAgent;
drop table TempSameAgent;
drop PROCEDURE pro_sel_agent
3.2、新建临时表(注意:我这里的临时表就是真实的表,只是临时用一下,然后删掉的)
create TABLE TempNoIntroAgent(
AgentId BIGINT NOT NULL,
LoginId VARCHAR(50) not NULL
);
create TABLE TempNoBelongAgent(
AgentId BIGINT NOT NULL,
LoginId VARCHAR(50) not NULL
);
create TABLE TempSameAgent(
AgentId BIGINT NOT NULL,
LoginId VARCHAR(50) not NULL
);
3.3、新建存储过程,其中使用游标保存数据列表,然后循环
CREATE PROCEDURE pro_sel_agent()
BEGIN
DECLARE done INT DEFAULT 0 ;
DECLARE _agentid int;
DECLARE _loginid VARCHAR(50);
DECLARE agentnum int;
#新建游标
declare cur1 CURSOR FOR select Id,LoginId from Agent;
set agentnum = (select count(*) from Agent where BonusStatus = 0);
#打开游标
OPEN cur1;
FETCH cur1 into _agentid,_loginid; //使用fetch into 语法把游标的每一行的数据赋值给临时变量
WHILE agentnum >0 DO
set @agentId=(select Id from Agent where LoginId =_loginid);
set @noIntroNum = (select count(*) from AgentIntroductionBiz where IntroducerId = @agentId);
set @noBelongNum = (select count(*) from AgentBelongBizPosition where ParentId = @agentId);
if @noIntroNum > 0 and @noBelongNum = 0 THEN
INSERT into TempNoIntroAgent(AgentId,LoginId)
values(_agentid,_loginid);
ELSEIF @noBelongNum > 0 and @noIntroNum = 0 THEN
INSERT into TempNoBelongAgent(AgentId,LoginId)
values(_agentid,_loginid);
ELSE
set @sameNum = (
select count(b.LoginId) FROM(
select a.LoginId
from AgentIntroductionBiz as ai
INNER JOIN Agent as a on a.Id=ai.Id
where ai.IntroducerId=@agentId
)as a
INNER JOIN(
SELECT a.LoginId
from AgentBelongBizPosition as ap
INNER JOIN Agent as a on a.Id=ap.Id
where ap.ParentId=@agentId
) as b on b.LoginId=a.LoginId
);
IF @sameNum > 0 THEN
INSERT into TempSameAgent(AgentId,LoginId)
values(_agentid,_loginid);
end if;
end IF;
set agentnum = agentnum-1;
FETCH cur1 into _agentid,_loginid; //注意:这里也要使用fetch into 语法把游标的每一行的数据赋值给临时变量,否则临时变量的值就一直不会改变;
END WHILE;
CLOSE cur1;
END;
好了先写到这了,有问题的话,可以一起交流下;
业余时间赚点零花钱点这里
MySQL存储过程使用游标循环数据列表相关推荐
- mysql存储过程之游标遍历数据表
今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕迹. ? 1 BEGIN 2 ...
- MySQL存储过程中游标使用
在使用游标的时候,使用LOOP没有响应,后找到使用REPEAT实现,以下是代码: 建表语句 DROP table IF EXISTS test_table; create table test_tab ...
- mysql怎么用游标修改数据_MySql使用游标Cursor循环(While)更新数据
#要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECL ...
- MySQL存储过程和游标
MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就是为以后的 ...
- mysql存储过程之游标
MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就是为以后的 ...
- mysql怎么用游标修改数据,如何使用mysql 游标?
以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助. 1. ...
- 记一次MySQL存储过程和游标的使用
需求: 有三张表:Player.Consumption.Consumption_other.Player表中记录用户信息(playerid.origin等字段),Consumption和Consump ...
- Mysql存储过程和游标的一点理解
最近学习数据库语言sql,学到了存储过程和游标这一块,上课一点没听,可以说是全程懵逼.不过好在有个课后的实验,然而cmd中的报错往往极其粗糙,只会告诉你什么附近有错(有时候还是错的),在不知error ...
- MySQL存储过程中的循环怎么写
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
最新文章
- android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
- 记一次OOM问题排查过程
- NR 5G NAS非接入层
- sonar的次要问题_次要GC,主要GC与完整GC
- docker-compose bug
- Java学习笔记(九)--数组及Arrays类
- 客座招生 | 中科院深圳先进院招收智能机器人方向联培和客座学生
- 关于Outlook删除原邮箱邮件的解决办法
- yolo数据集txt标注转voc数据集xml标注格式
- C语言指向结构体的指针的例子
- 3dmax高版本转低版本插件_3dmax高版本和低版本中视口配置如何去阴影
- 二叉树的概念和基本术语
- JavaScript 执行覆盖测试分析
- multipartfile 获取文件路径_Excel工作表中的20个信息函数,获取文件路径,单元格格式等!...
- 黑马程序员-JavaAPI-17天-4(Arrays)
- 第1章 神经网络的思想
- python自己制作视频_你还在为看电影发愁?Python制作全网视频播放工具!
- 机器学习算法——神经网络3(误差逆传播算法-BP算法)
- 2006德国世界杯完全赛程表
- Spring Security使用数据库登录认证授权