######在游标循环中,如果含有select查询,查询的结果为null的情况会导致游标提前退出循环*********
在游标内的select可能为null的项后面重置循环结果可避免游标只循环一次的情况;
SET done = false; # 这里很关键::因为如果select查询不到数据项直接退出循环
参考:https://www.cnblogs.com/Braveliu/p/10144510.html
BEGIN   
	DECLARE idCount int DEFAULT 0;-- 定义查询的id count
DECLARE nameCount int DEFAULT 0;-- 统计相同名字合计
DECLARE openerId int DEFAULT 0;
DECLARE openerName VARCHAR(255);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 定义游标
DECLARE cur CURSOR FOR select count(*) count,opener FROM qf_invoice where (`status` >10 or `status` =1) GROUP BY opener;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO nameCount,openerName;
SELECT nameCount,openerName;
-- 声明结束的时候
IF done THEN
SELECT 'done';
LEAVE read_loop;
END IF;
-- 业务逻辑
SELECT id,COUNT(id) into openerId,idCount from qf_merchant_invoice where `status` = 1 and opener = openerName;
if(idCount !=0) THEN -- 查询结果为null时游标会主动退出
update qf_merchant_invoice SET invoice_number = invoice_number + nameCount where id = openerId;
ELSE
INSERT into qf_merchant_invoice(opener,invoice_number,create_time,STATUS) VALUES(openerName,nameCount,NOW(),1);
end if;
END LOOP;
-- 关闭游标
CLOSE cur;
END

 有一点:有时候使用游标要使用别名,不然会造成游标结果和sql查询不一致;

加上别名: 

不加别名:

数据库直接查询结果

mysql存储过程游标使用的更多相关文章

  1. MySQL存储过程 游标

    MySQL存储过程  游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...

  2. mysql存储过程游标嵌套循环

    自己写的一个mysql存储过程如下: BEGIN DECLARE _did bigint(20);DECLARE _count int;DECLARE s1 int;DECLARE cur_1 CUR ...

  3. MySQL 存储过程/游标/事务

    将会用到的几个表 mysql> DESC products; +------------+--------------+------+-----+---------+-------------- ...

  4. php调用mysql存储过程游标

    <?php $dbtype = 'mysql'; $host = 'localhost'; $dbname = 'test'; $dsn = "$dbtype:host=$host;d ...

  5. mysql存储过程游标加计划任务事件调度器

    存储过程加事件调度器 -- 存储过程 (多个)游标的使用 临时表的使用(让执行时间从一个小时降低到5分钟)DELIMITER $$ DROP PROCEDURE IF EXISTS `eval_cal ...

  6. mysql 存储过程 游标嵌套

    基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...

  7. MySQL 存储过程游标

    一.创建游标 游标用declare语句创建.如下面的例子所示: create procedure test2() begin declare cursorTest cursor for select ...

  8. mysql存储过程 --游标的使用 取每行记录 (多字段)

    delimiter $ create PROCEDURE phoneDeal() BEGIN DECLARE id varchar(64); -- id DECLARE phone1 varchar( ...

  9. mysql 存储过程 -- 游标的使用(备忘)

    BEGIN ; DECLARE f_ratio FLOAT DEFAULT 0.8; ); ); DECLARE i_statDate DATE; DECLARE i_accumulateCount ...

  10. mysql 存储过程 游标的使用 与定义

    1.游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作:游标有下面这些属性: a.游标是只读的,也就是不能更新它: b.游标是不能滚动的,也就是只能在一个方向上进 ...

随机推荐

  1. [面试]synchronized

    synchronized 把面试中遇到的问题进行了整理. 本篇文章copy+整理自: 1. http://www.cnblogs.com/lingepeiyong/archive/2012/10/30 ...

  2. python 之金玉良言 或许是最后一次给自己系统总结--已结

    jar tvf xxx.jar vim xxx.jar 配置一下 notepad++ F5 cmd /k D:"Program Files (x86)"\python\python ...

  3. spring整合mybatis,批量扫描mapper接口出现异常

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c ...

  4. Oracle DB Day01(SQL)

    --时间为什么不是现在呢? --设置时区和显示时间 ALTER DATABASE SET TIME_ZONE='+08:00' select to_char(current_timestamp at ...

  5. python3 练手实例1 计算三角形周长和面积

    def j(): a,b,c=map(float,input('请输入三角形三条边的长度,用空格隔开:').split()) if a>0 and b>0 and c>0 and a ...

  6. Microsoft Internet Explorer v11 / XML External EntityInjection 0day

    [+] Credits: John Page (aka hyp3rlinx) [+] Website: hyp3rlinx.altervista.org[+] Source:  http://hyp3 ...

  7. HDU-1709 The Balance(生成函数)

    题意 给$n$个数,有哪些属于$1$到$n$个数字总和$sum$的数是通过该集合任意子集之间的加减运算无法得到的. 思路 对每个数构造$x^{-a[i]}+1+x^{a[i]}$,为了避免负幂次可以将 ...

  8. 内网环境上部署k8s+docker集群:集群ftp的yum源配置

    接触docker已经有一年了,想把做的时候的一些知识分享给大家. 因为公司机房是内网环境无法连接外网,所以这里所有的部署都是基于内网环境进行的. 首先,需要通过ftp服务制作本地的yum源,可以从ht ...

  9. Codeforces Round #541 (Div. 2)题解

    不知道该更些什么 随便写点东西吧 https://codeforces.com/contest/1131 ABC 太热了不写了 D 把相等的用并查集缩在一起 如果$ x<y$则从$ x$往$y$ ...

  10. Mysql_存储过程

    1.navicat新建存储过程 选择 过程 增加输入输出参数(若是无参,直接点击完成) 完成后代码如下: CREATE DEFINER = CURRENT_USER PROCEDURE `kxy_pr ...