Mysql存儲過程中使用臨時表和游標


1。臨時表 

 1 DROP PROCEDURE
 2 IF EXISTS `P_GetMonitorPeople`;
 3 CREATE PROCEDURE P_GetMonitorPeople (IN fgid INT, IN mins INT,in lens INT)
 4 BEGIN
 5 IF fgid>0&&mins>0&&lens>0 THEN
 6 BEGIN
 7 -- 建表tb_temp1
 8 DROP TABLE IF EXISTS tb_temp1;
 9 CREATE TEMPORARY TABLE tb_temp1(
10 `Tmp_Id` int UNSIGNED NOT NULL AUTO_INCREMENT, 
11 `GatherID` int NOT NULL,
12 `PhoneMac` varchar(12) NOT NULL,
13 `number` int NOT NULL,
14 PRIMARY KEY (`Tmp_Id`)
15 ) ENGINE = MYISAM DEFAULT charset = utf8; 
16 -- 填充tb_temp1
17 INSERT into tb_temp1(GatherID,PhoneMac,number)
18 select gatherid, phonemac,count(phonemac) as number from (
19 select DISTINCT s.GatherID,s.phonemac from tb_app_gather_mac_shot s
20 LEFT JOIN tb_web_config_gather g on g.gatherid=s.gatherid 
21 where s.logtime BETWEEN DATE_SUB(NOW(),INTERVAL mins MINUTE) and NOW() and g.floorid=(select floorid from tb_web_floors where groupid=fgid)
22 ORDER BY s.logtime) as tb GROUP BY phonemac order by number DESC LIMIT lens;
23 
24 select DISTINCT g.gatherid, t.phonemac,g.locationx,g.locationy from tb_temp1 t
25 LEFT JOIN tb_web_config_gather g on g.gatherid=t.gatherid;
26 END;
27 END IF;
28 #銷毀內存表
29 DROP TABLE IF EXISTS tb_temp1;
30 END
31 
32 -- 顯示
33 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM