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 ...
随机推荐
- excel设置单元格不可编辑
把允许编辑的单元格选定,右键-设置单元格格式-保护,把锁定前的对钩去掉.再点工具-保护工作表.这样就可以只让你刚才设定的单元格允许编辑,其他不允许.
- grails-MappingException: Could not determine Type
在用grails的时候遇到这个问题,反复调试了很久,没有进展,同时敲了几个命令后好了,真纠结,这是框架的问题吗? 问题: Caused by MappingException: Could not d ...
- Web工程师的工具箱
RequestBin:允许你创建一个URL,利用这款工具进行收集请求,然后通过个性化方式进行检查. Hurl:发出HTTP请求,输入URL,设置标题,查看响应,最后分享给其他人.类似的工具有:REST ...
- Automatically watermark all uploaded photos (给所有上传的相片加水印)
Hello, This mod automatically watermark all uploaded photos. Price: FREE, enjoy. You will have to ed ...
- win7 IIS7.0 【IIS 管理器无法验证此内置帐户是否有访问权】
异常信息: 服务器配置为将传递身份验证和内置帐户一起使用,以访问指定的物理路径.但是,IIS 管理器无法验证此内置帐户是否有访问权.请确保应用程序池标识具有该物理路径的读取访问权.如果此服务器加入到域 ...
- C语言 位操作
c语言位操作中需要注意有: 位操作只针对整型和字符型数据 在右移操作中:对无符号数和有符号中的正数补 0:符号数中的负数,取决于所使用的系统:补 0 的称为“逻辑右移”,补 1 的称为“算术右移”. ...
- 扩展《C程序设计语言》练习2-3程序通用性
最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...
- 周赛C题 LightOJ 1047 (DP)
C - C Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Description Th ...
- Jedis 一
//连接Jedis public Jedis getJedis(){ Jedis jedis = new Jedis("192.168.1.12",6379); //权限认证 // ...
- IIS principle
IIS Request | | | Application Pool Config | | | W3WP | | | Many Module | | | AppDomain:这才是.NET的入口 | ...