本篇文章主要讲解,我的一个案例,使用存储过程和游标循环数据列表,并且做一些操作,比如保存一些数据,修改一些数据;

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存储过程使用游标循环数据列表相关推荐

  1. mysql存储过程之游标遍历数据表

    今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕迹. ? 1  BEGIN  2      ...

  2. MySQL存储过程中游标使用

    在使用游标的时候,使用LOOP没有响应,后找到使用REPEAT实现,以下是代码: 建表语句 DROP table IF EXISTS test_table; create table test_tab ...

  3. mysql怎么用游标修改数据_MySql使用游标Cursor循环(While)更新数据

    #要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECL ...

  4. MySQL存储过程和游标

    MySQL5 中添加了存储过程的支持.     大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成     存储过程简单来说,就是为以后的 ...

  5. mysql存储过程之游标

    MySQL5 中添加了存储过程的支持.     大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成     存储过程简单来说,就是为以后的 ...

  6. mysql怎么用游标修改数据,如何使用mysql 游标?

    以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助. 1. ...

  7. 记一次MySQL存储过程和游标的使用

    需求: 有三张表:Player.Consumption.Consumption_other.Player表中记录用户信息(playerid.origin等字段),Consumption和Consump ...

  8. Mysql存储过程和游标的一点理解

    最近学习数据库语言sql,学到了存储过程和游标这一块,上课一点没听,可以说是全程懵逼.不过好在有个课后的实验,然而cmd中的报错往往极其粗糙,只会告诉你什么附近有错(有时候还是错的),在不知error ...

  9. MySQL存储过程中的循环怎么写

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

最新文章

  1. android+邮箱删除邮件,在Android上删除烦人的语音邮件通知 | MOS86
  2. 记一次OOM问题排查过程
  3. NR 5G NAS非接入层
  4. sonar的次要问题_次要GC,主要GC与完整GC
  5. docker-compose bug
  6. Java学习笔记(九)--数组及Arrays类
  7. 客座招生 | 中科院深圳先进院招收智能机器人方向联培和客座学生
  8. 关于Outlook删除原邮箱邮件的解决办法
  9. yolo数据集txt标注转voc数据集xml标注格式
  10. C语言指向结构体的指针的例子
  11. 3dmax高版本转低版本插件_3dmax高版本和低版本中视口配置如何去阴影
  12. 二叉树的概念和基本术语
  13. JavaScript 执行覆盖测试分析
  14. multipartfile 获取文件路径_Excel工作表中的20个信息函数,获取文件路径,单元格格式等!...
  15. 黑马程序员-JavaAPI-17天-4(Arrays)
  16. 第1章 神经网络的思想
  17. python自己制作视频_你还在为看电影发愁?Python制作全网视频播放工具!
  18. 机器学习算法——神经网络3(误差逆传播算法-BP算法)
  19. 2006德国世界杯完全赛程表
  20. Spring Security使用数据库登录认证授权

热门文章

  1. Activiti工作流引擎使用
  2. 摘: cmd环境 使用一点知识
  3. 互联网业界7月三件大事
  4. Java学习教程整理
  5. ConcurrentHashMap的源码分析-高低位原理分析
  6. MyBatis 插件原理与自定义插件-PageHelper 原理
  7. MyBatis 缓存详解-二级缓存验证
  8. https安全传输协议
  9. 如果传输的文件过大怎么办
  10. SpringMVC快速入门-开发步骤