1、用游标循环

BEGIN  

-- 定义变量 

    -- 定义done
DECLARE done INT;
-- 定义 ammeter_id_bl
DECLARE ammeter_id_bl DOUBLE;
-- 定义表名(tableName)游标
DECLARE rs_ammeter_id CURSOR FOR -- 得到游标集合
SELECT id FROM `res_meter` WHERE id<>1 AND id<>10 AND meter_type=1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '' SET done=1; -- 初始化done,为0,false
SET done = 0;
-- 打开游标
OPEN rs_ammeter_id;
-- 遍历游标(开始循环)
REPEAT
FETCH rs_ammeter_id into ammeter_id_bl; IF done<>1 then
/*
1、处理要插入的数据
*/
-- 给变量赋值 SET @ammeter_id_bl=ammeter_id_bl; SELECT t.*
INTO
@min_meter_count_top
,@min_meter_count_max
,@min_meter_count_avg
,@min_meter_count_min
,@add_top
,@add_max
,@add_avg
,@add_min
,@collect_time
,@meter_status
FROM
(
SELECT
meter_count_top
,meter_count_max
,meter_count_avg
,meter_count_min
,ROUND(RAND()*10+4,2) add_top
,ROUND(RAND()*8+3,2) add_max
,ROUND(RAND()*7+2,2) add_avg
,ROUND(RAND()*6+1,2) add_min
,DATE_ADD(collect_time, INTERVAL 30 MINUTE) collect_time
,ROUND(RAND(),0) meter_status
FROM
cap_ammeter_201810
WHERE
collect_time = (
SELECT
MAX(collect_time) collect_time
FROM
cap_ammeter_201810
WHERE
ammeter_id = @ammeter_id_bl
GROUP BY
ammeter_id
)
AND ammeter_id = @ammeter_id_bl
)t; SET @meter_count_top=ROUND(@min_meter_count_top+@add_top,2)
,@meter_count_max=ROUND(@min_meter_count_max+@add_max,2)
,@meter_count_avg=ROUND(@min_meter_count_avg+@add_avg,2)
,@meter_count_min=ROUND(@min_meter_count_min+@add_min,2); SET @meter_count=ROUND(@meter_count_top+@meter_count_max+@meter_count_avg+@meter_count_min,2);
-- 查看变量的值
/*
SELECT
@ammeter_id_bl
,@collect_time
,@meter_status
,@min_meter_count_top
,@min_meter_count_max
,@min_meter_count_avg
,@min_meter_count_min
,@add_top
,@add_max
,@add_avg
,@add_min
,@meter_count_top
,@meter_count_max
,@meter_count_avg
,@meter_count_min;
*/ /*
2、插入数据 */
-- 1)写sql语句 如果要用到变量,使用CONCAT()拼接
-- 查询出要插入的数据
SET @queryDataSqlStr=CONCAT("SELECT
                ",ROUND(@meter_count,2)," meter_count
                ,'",@collect_time,"' collect_time
                ,",@ammeter_id_bl," ammeter_id
                ,",@meter_status," meter_status
                ,",ROUND(@meter_count_top,2)," meter_count_top
                ,",ROUND(@meter_count_max,2)," meter_count_max
                ,",ROUND(@meter_count_avg,2)," meter_count_avg
                ,",ROUND(@meter_count_min,2)," meter_count_min"
               );
-- 插入数据
SET @insertSqlStr=CONCAT("INSERT INTO cap_ammeter_201810
(
meter_count
,collect_time
,ammeter_id
,meter_status
,meter_count_top
,meter_count_max
,meter_count_avg
,meter_count_min
) ",@queryDataSqlStr
); -- 4)查看sql语句
-- SELECT @insertSqlStr; -- 3)执行sql语句
PREPARE insertSqlStr FROM @insertSqlStr;
EXECUTE insertSqlStr; END IF;
-- 直到done变为true结束循环
UNTIL done END
REPEAT;
CLOSE rs_ammeter_id;
END

2、while循环

BEGIN
-- 定义变量
DECLARE i INT DEFAULT 10;
-- 开始循环
WHILE i<13
DO
SET @day_bl=i;
SET @createSqlStr=CONCAT("CREATE TABLE cap_ammeter_2017",@day_bl,"
                      (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`meter_count` double(14,2) DEFAULT NULL COMMENT '电表读数',
`collect_time` datetime DEFAULT NULL COMMENT '采集时间',
`ammeter_id` bigint(20) NOT NULL COMMENT '电表id,对应res_meter的id',
`meter_status` int(1) NOT NULL COMMENT '电表状态 0:正常;1:异常',
`meter_count_top` double(14,2) DEFAULT NULL COMMENT '尖值电量',
`meter_count_max` double(14,2) DEFAULT NULL COMMENT '峰值电量',
`meter_count_avg` double(14,2) DEFAULT NULL COMMENT '平值电量',
`meter_count_min` double(14,2) DEFAULT NULL COMMENT '谷值电量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19576 DEFAULT CHARSET=utf8;");
-- 查看sql
-- SELECT @createSqlStr;
-- 运行sql
PREPARE createSqlStr FROM @createSqlStr;
EXECUTE createSqlStr; SET i=i+1; END WHILE;
COMMIT;
END

mysql 存储过程变量及循环的使用的更多相关文章

  1. MySql 存储过程 光标只循环一次

    [1]MqSql 存储过程 光标只循环一次 针对MySql存储过程,光标只循环一次就退出的场景,可能原因分析: (1)存储过程有问题(仔细检查语法.控制变量.条件等等) (2)保证存储过程正确.调用过 ...

  2. mysql存储过程变量的拼接

    存储过程变量的拼接   有时候我们需要模糊查询,但是同时我们又要 在模糊查询的时候使用变量,我们又想在变量的后面拼接一个%去匹配模糊查询   那么就会用到 concat函数   示例如下:  www. ...

  3. mysql存储过程查询结果循环遍历 判断 赋值 游标等基本操作

    一.首先说下本篇博客所实现功能的背景和功能是怎样的: 背景:因为公司项目开始迁移新平台项目,所以以前的平台老数据以及订单信息需要拆分表,而且需要业务逻辑来分析以前的订单表,来拆分成另外的几个新表,包括 ...

  4. mysql 存储过程变量的定义

    Mysql变量: 1.DECLARE variable_name datatype(size) DEFAULT default_value; 此处声明的相当于一个局部变量 ,在end 之后便失效. 声 ...

  5. Java 感知Mysql存储过程变量数量

    在项目中,可能会遇到sybase 移植到 mysql的情况,因为sybase 支持存储过程的可变参数,而mysql不能支持,所以,在调用mysql的时候,需要感知存储过程到底有几个参数,来合理的配置参 ...

  6. mysql存储过程使用游标循环插入数据

    DELIMITER $$ DROP PROCEDURE IF EXISTS `procedure_course`$$ CREATE DEFINER=`root`@`localhost` PROCEDU ...

  7. Mysql存储过程给变量赋值的几种方法实践

    BEGIN DECLARE v_request_count INT; #申请次数 DECLARE v_plan_count INT; #安排次数 DECLARE v_learn_count INT; ...

  8. MySQL存储过程中的3种循环

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

  9. MySQL 存储过程循环

    MySQL  存储过程循环 MySQL循环语句(包括WHILE,REPEAT和LOOP)来根据条件反复运行代码块. MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块. MySQL中有三个 ...

随机推荐

  1. 博客和GitHup链接地址

    硕哥博客链接:http://www.cnblogs.com/999-/p/6073601.html 硕哥GitHup链接:https://github.com/xiaodoufu

  2. P2042 [NOI2005]维护数列[splay或非旋treap·毒瘤题]

    P2042 [NOI2005]维护数列 数列区间和,最大子列和(必须不为空),支持翻转.修改值.插入删除. 练码力的题,很毒瘤.个人因为太菜了,对splay极其生疏,犯了大量错误,在此记录,望以后一定 ...

  3. python爬虫知识点总结(一)库的安装

    环境要求: 1.编程语言版本python3: 2.系统:win10; 3.浏览器:Chrome68.0.3440.75:(如果不是最新版有可能影响到程序执行) 4.chromedriver2.41 注 ...

  4. uC/OS-II源码分析(五)

    每个任务被赋予不同的优先级等级,从0 级到最低优先级OS_LOWEST_PR1O,包括0 和 OS_LOWEST_PR1O 在内.当μC/OS-Ⅱ初始化的时候,最低优先级OS_LOWEST_PR1O  ...

  5. Ubuntu环境下对拍

    何为对拍 假设我在考场上写了一个能过样例的算法.然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了. 所谓对拍,就是对着拍 ...

  6. No overload for 'OnStartup' matches delegate 'System.Windows.StartupEventHandler'

    No overload for &apos;OnStartup&apos; matches delegate &apos;System.Windows.StartupEvent ...

  7. VijosP1443:银河英雄传说

    描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集 ...

  8. java——static声明方法注意事项

    在使用 static 类型声明的方法时需要注意的是:如果在类中声明了一 static类型的属性,则此属性既可以在非 static 类型的方法中使用,也可以在 static类型的方法中使用.但用 sta ...

  9. Windows下caffe安装详解(仅CPU)

    本文大多转载自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己实战心得. 1.环境:windows 7\VS2013 2. ...

  10. 删除win7快捷方式小箭头

    删除win7快捷方式小箭头 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Sh ...