BEGIN
DECLARE f_leastCount INT DEFAULT 100;
DECLARE f_ratio FLOAT DEFAULT 0.8; DECLARE i_channel VARCHAR(64);
DECLARE i_appVersionName VARCHAR(64);
DECLARE i_statDate DATE;
DECLARE i_accumulateCount INT;
DECLARE i_activateCount INT;
DECLARE i_dau30Count INT;
DECLARE i_dau7Count INT;
DECLARE i_dauCount INT;
DECLARE i_dauImeiCount INT;
DECLARE i_dauImsiCount INT;
DECLARE i_launchCount INT;
DECLARE i_lostCount INT;
DECLARE i_newCount INT; #遍历数据结束标志
DECLARE done INT DEFAULT FALSE; #游标
DECLARE cur CURSOR FOR SELECT ds.channel,ds.appVersionName,ds.statDate,ds.accumulateCount,ds.activateCount,ds.dau30Count,ds.dau7Count,ds.dauCount,ds.dauImeiCount,ds.dauImsiCount,ds.launchCount,ds.lostCount,ds.newCount FROM appstore_dau_stat ds WHERE ds.statDate = DATE_SUB(CURDATE(),INTERVAL m_daysdelay DAY);
#将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据
FETCH cur INTO i_channel, i_appVersionName, i_statDate, i_accumulateCount, i_activateCount, i_dau30Count, i_dau7Count, i_dauCount, i_dauImeiCount, i_dauImsiCount, i_launchCount, i_lostCount, i_newCount;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 事务处理
IF i_accumulateCount > f_leastCount THEN
SET i_accumulateCount = ROUND(i_accumulateCount * f_ratio);
END IF;
IF i_activateCount > f_leastCount THEN
SET i_activateCount = ROUND(i_activateCount * f_ratio);
END IF;
IF i_dau30Count > f_leastCount THEN
SET i_dau30Count = ROUND(i_dau30Count * f_ratio);
END IF;
IF i_dau7Count > f_leastCount THEN
SET i_dau7Count = ROUND(i_dau7Count * f_ratio);
END IF;
IF i_dauCount > f_leastCount THEN
SET i_dauCount = ROUND(i_dauCount * f_ratio);
END IF;
IF i_dauImeiCount > f_leastCount THEN
SET i_dauImeiCount = ROUND(i_dauImeiCount * f_ratio);
END IF;
IF i_dauImsiCount > f_leastCount THEN
SET i_dauImsiCount = ROUND(i_dauImsiCount * f_ratio);
END IF;
IF i_launchCount > f_leastCount THEN
SET i_launchCount = ROUND(i_launchCount * f_ratio);
END IF;
IF i_lostCount > f_leastCount THEN
SET i_lostCount = ROUND(i_lostCount * f_ratio);
END IF;
IF i_newCount > f_leastCount THEN
SET i_newCount = ROUND(i_newCount * f_ratio);
END IF; IF NOT EXISTS (SELECT id FROM appstore_dau_stat_temp WHERE channel = i_channel AND appVersionName = i_appVersionName AND statDate = i_statDate) THEN
INSERT INTO appstore_dau_stat_temp(channel,appVersionName,statDate,accumulateCount,activateCount,dau30Count,dau7Count,dauCount,dauImeiCount,dauImsiCount,launchCount,lostCount,newCount)
VALUES(i_channel, i_appVersionName, i_statDate, i_accumulateCount, i_activateCount, i_dau30Count, i_dau7Count, i_dauCount, i_dauImeiCount, i_dauImsiCount, i_launchCount, i_lostCount, i_newCount);
END IF; END LOOP;
-- 关闭游标
CLOSE cur; END

参数声明:IN `m_daysdelay` int

提取一下,游标的使用大体是这样:

BEGIN
  #遍历数据结束标志
DECLARE done INT DEFAULT FALSE; #游标
DECLARE cur CURSOR FOR SELECT 字段1,字段2... FROM 表1;
#将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据
FETCH cur INTO 变量1,变量2...;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 事务处理
    #在这里做你想做的事
 END LOOP;

 -- 关闭游标 
CLOSE cur; END

mysql 存储过程 -- 游标的使用(备忘)的更多相关文章

  1. MySQL存储过程 游标

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

  2. centos 6.4 mysql rpm 离线安装【备忘】

    离线状态下使用rpm的安装包进行mysql的安装,仅作备忘 准备工作: 官网下载mysql离线rpm安装包(这里就不演示了,拿现成的做演示) =================更新线 2018-01- ...

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

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

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

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

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

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

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

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

  7. mysql 存储过程 游标嵌套

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

  8. 关于oracle存储过程的若干问题备忘

    1.在oracle中,数据表别名不能加as,如: select a.appname from appinfo a;-- 正确select a.appname from appinfo as a;-- ...

  9. MySQL 存储过程游标

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

随机推荐

  1. 十、Struts2结果集

      十.Struts2结果集                         1.Struts.xml配置文件 result元素:指定动作类的动作方法执行完后的结果视图. 属性: name:字符串,与 ...

  2. C#基础-ref、out

    1.默认情况下,C#假定所有的方法参数传递都是传值的. 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddVal ...

  3. Linux 不挂载设备,获取设备的文件系统信息

    块设备挂载后,可以通过df 或者 mount命令查看设备的文件系统信息.然而,有时候需要在不挂载设备的情况下予以判断,此时可以使用如下的方法: (1)查看文件系统类型 命令: file -sL /de ...

  4. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

    参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...

  5. jQuery中$.ajax()和$.getJson()同步处理详解

    一.前言 为什么需要用到同步,因为有时候我们给一个提交按钮注册提交表单数据的时候,在提交动作之前会进行一系列的异步ajax请求操作,但是页面js代码会按顺序从上往下面执行,如果你在这过程中进行了异步操 ...

  6. 利用DIV+CSS制作网页过程中常用的基本概念及标签使

    CSS主要用于对HTML文件功能的补充及扩展,其作用就是对HTML文件中各种排版进行设置,达到对网页中字体.颜色.背景.图片等的控制,使网页能够完全依照设计者的想法来显示. CSS可以控制网页的显示, ...

  7. js dom 操作

    JS的DOM操作   1DOM是文档对象模型,这种模型为树模型:文档是指标签文档,对象是指文档中每个元素:模型是指抽象化的东西. 2间隔与延迟间隔执行一段代码(函数):window.setInterv ...

  8. 64位操作系统弹出"Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll”

    64位操作系统弹出"Failed to load the JNI shared library /..jre/bin/client/jvm.dll”,最大的可能就是jdk的版本问题.去你的C ...

  9. sed命令实战

    删除所有的空行,并在每行后面增加一个空行 sed '/^$/d;G' /etc/fstab 将每一行前导的“空白字符”(空格,制表符)删除 sed 's/^[\t ]*//' file 将文本中的 a ...

  10. C#生成不重复的随机数

    在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数 http://www.jbxue.com/tags/suijishu.h ...