您的位置:首页 > 数据库 > MySQL

MySQL 存储过程,游标,临时表创建

2014-04-04 10:59 751 查看
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `filter_record_time`(startTime timestamp, endTime timestamp, pointIndex int)
BEGIN
declare _recordtime timestamp;
declare _pointIndex smallint;
declare _value double;
declare _result text;
declare _previoustime timestamp;
DECLARE done INT DEFAULT FALSE;

declare fetchSeqCursor cursor for select distinct RecordTime,PointIndex,Value
from flow_record
where recordtime >= startTime
and recordtime < endTime
and pointIndex = pointIndex
and recordtime is not null
order by recordtime;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

create table if not exists filter_record_time_temp(timeFrom timestamp, timeTo timestamp, times int);

open fetchSeqCursor;

seq_loop:loop
fetch fetchSeqCursor into _recordtime, _pointIndex, _value;

IF done THEN
LEAVE seq_loop;
END IF;

if _previoustime is null then
if _recordtime <> startTime then
insert into filter_record_time_temp select startTime timefrom, _recordtime timeto,
cast((unix_timestamp(_recordtime) - unix_timestamp(startTime) - 120) / 120 as signed)  times;
end if;
else
if unix_timestamp(_previoustime) + 120 < unix_timestamp(_recordtime) then
insert into filter_record_time_temp select _previoustime timefrom, _recordtime timeto,
cast((unix_timestamp(_recordtime) - unix_timestamp(_previoustime) - 120) / 120 as signed) times;
end if;
end if;

set _previoustime = _recordtime;
end loop;

close fetchSeqCursor;

if unix_timestamp(_previoustime) + 120 < unix_timestamp(endTime) then
insert into filter_record_time_temp select _previoustime timefrom, endTime timeto,
cast((unix_timestamp(endTime) - unix_timestamp(_previoustime) - 120) / 120 as signed) times;
end if;

select * from filter_record_time_temp;

drop table if exists filter_record_time_temp;

END


真尼玛烦人,各个数据库sql语法都不一致,写一点东西查半天资料,耽误时间.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: