mysql存储过程中使用临时表和游标
1。临时表
DROP PROCEDURE
IF EXISTS `P_GetMonitorPeople`;
CREATE PROCEDURE P_GetMonitorPeople (IN fgid INT, IN mins INT,in lens INT)
BEGIN
IF fgid>0&&mins>0&&lens>0 THEN
BEGIN
-- 建表tb_temp1
DROP TABLE IF EXISTS tb_temp1;
CREATE TEMPORARY TABLE tb_temp1(
`Tmp_Id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`GatherID` int NOT NULL,
`PhoneMac` varchar(12) NOT NULL,
`number` int NOT NULL,
PRIMARY KEY (`Tmp_Id`)
) ENGINE = MYISAM DEFAULT charset = utf8;
-- 填充tb_temp1
INSERT into tb_temp1(GatherID,PhoneMac,number)
select gatherid, phonemac,count(phonemac) as number from (
select DISTINCT s.GatherID,s.phonemac from tb_app_gather_mac_shot s
LEFT JOIN tb_web_config_gather g on g.gatherid=s.gatherid
where s.logtime BETWEEN DATE_SUB(NOW(),INTERVAL mins MINUTE) and NOW() and g.floorid=(select floorid from tb_web_floors where groupid=fgid)
ORDER BY s.logtime) as tb GROUP BY phonemac order by number DESC LIMIT lens; select DISTINCT g.gatherid, t.phonemac,g.locationx,g.locationy from tb_temp1 t
LEFT JOIN tb_web_config_gather g on g.gatherid=t.gatherid;
END;
END IF;
#销毁内存表
DROP TABLE IF EXISTS tb_temp1;
END -- 显示
CALL P_GetMonitorPeople(3,1,50);
2。游标
DROP PROCEDURE
IF EXISTS P_GetMonitorData;
CREATE PROCEDURE P_GetMonitorData(fgid int,mins int,lens int,mac varchar(12)) BEGIN
DECLARE tmpid int ;
DECLARE gid varchar(10) ;
DECLARE done INT DEFAULT FALSE;
DECLARE pregatherid int DEFAULT 0;
DECLARE str VARCHAR(200);
-- 定义游标
DECLARE rs CURSOR for select Tmp_Id,GatherID from tb_temp2;
-- 错误定义,标记循环结束
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
-- 打开游标
OPEN rs;
-- 循环执行
REPEAT
FETCH rs into tmpid,gid ;
IF NOT done THEN
#执行操作
IF pregatherid=gid && pregatherid <> 0 THEN
DELETE from tb_temp2 where Tmp_Id=tmpid;
ELSE
SET pregatherid=gid;
-- SET str=CONCAT(gid,str);
END IF;
END IF;
#当_done=FALSE时退出被循
UNTIL done
END REPEAT;
/*关闭游标*/
CLOSE rs;
select * from tb_temp2;
SET done=FALSE;#只有定义为false,新的循环才能继续。
END
mysql存储过程中使用临时表和游标的更多相关文章
- Mysql 存储过程中使用多游标
Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) ...
- MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
- sqlserver 存储过程中使用临时表到底会不会导致重编译
曾经在网络上看到过一种说法,SqlServer的存储过程中使用临时表,会导致重编译,以至于执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果 ...
- MYSQL存储过程中常使用的命令记录
MYSQL存储过程中常使用的命令记录 1.触发器trigger 查看:show triggers; 2.存储过程procedure 查看:show procedure status; 查看详细:sho ...
- MYSQL存储过程中的IN、OUT和INOUT
MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...
- MySQL存储过程中使用SELECT …INTO语句为变量赋值
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...
- 【转】MySQL存储过程中使用动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- mysql -- 存储过程中 declare 和 set 定义变量的区别
mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...
- Sybase:存储过程中采用临时表存储统计数据
Sybase:存储过程中采用临时表存储统计数据 作用 很有效的提升统计查询速度,对于数据量亿级.千万级多表之间关联查询,非常有效: 使用 --无需定义临时表,直接使用 --自动释放临时表 select ...
随机推荐
- 自动Telnet远程登陆命令
有些时候,在面对开发机的时候,不断的telnet和不断的command自己的命令确实非常麻烦,需要一些自动测试或者自动部署的需求.然而面对telnet很多同学都跟我一样一开始觉得无法通过管道等传用户名 ...
- Freemarket学习笔记(一)
一.常用三个指令 1.if指令 a.<#if condition></#if> b.<#if condition><#else></#if> ...
- python执行shell获取硬件参数写入mysql
最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...
- 查看 yum 安装软件包的路径
yum:列出已安装的安装包 [root@localhost ~]# yum list | grep mysql akonadi-mysql.x86_64 1.9.2-4.el7 base apr-ut ...
- python——BS解析器
- Scut:参数导入方式(有遗留疑问)
先上一段代码: public EnvironmentSetting() { var appServer = GetServerSection(); var protocol = GetProtocol ...
- android 休眠唤醒机制分析(二) — early_suspend
本文转自:http://blog.csdn.net/g_salamander/article/details/7982170 early_suspend是Android休眠流程的第一阶段即浅度休眠,不 ...
- 机器学习公开课~~~~mooc
https://class.coursera.org/ntumlone-001/class/index
- PS5穿越云层3D文字
妈的,搜狗浏览器有时候会出问题,保存的内容找不到了…… 视图--显示参考线或者“显示额外内容”会取消或者加上参考线,后者功能更强一些,ctrl+D有时可以代替后者的功能,后者可以去掉蒙版的参考线,前者 ...
- Github上最受关注的前端大牛,快来膜拜吧!
1. Paul Irish Github主页: https://github.com/paulirish 个人主页: http://paulirish.com 维基百科: http://en.wiki ...