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

-- --------------------------------------------------------------------------------
-- 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语法都不一致,写一点东西查半天资料,耽误时间.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值