mysql存储过程游标的创建_MySQL 存储过程,游标,临时表创建

这篇博客讨论了一段MySQL存储过程的创建,该过程用于根据指定的时间范围和点索引过滤时间序列数据。它创建了一个临时表来存储过滤结果,并确保数据以120秒的间隔进行采样。作者抱怨了不同数据库SQL语法的不一致性,指出这增加了开发工作难度和时间消耗。
摘要由CSDN通过智能技术生成

-- --------------------------------------------------------------------------------

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值