mysql 存储过程例子

BEGIN

DECLARE ishave int DEFAULT 0;

/** current表字段 **/
DECLARE pro_id bigint DEFAULT 0;
DECLARE pro_gatewayid int DEFAULT 0;
DECLARE pro_sensorid int DEFAULT 0;
DECLARE pro_sensorhex varchar(20);
DECLARE pro_temperature NUMERIC(20,2);
DECLARE pro_humidity NUMERIC(20,2);
DECLARE pro_power NUMERIC(20,2);
DECLARE pro_gatewaytime datetime;
DECLARE pro_dyear int DEFAULT 0;
DECLARE pro_dmonth int DEFAULT 0;
DECLARE pro_dday int DEFAULT 0;
DECLARE pro_dhour int DEFAULT 0;
DECLARE pro_dmin int DEFAULT 0;
DECLARE pro_workingTime int DEFAULT 0;
DECLARE pro_hmax NUMERIC(20,2);
DECLARE pro_hmin NUMERIC(20,2);
DECLARE pro_tmax NUMERIC(20,2);
DECLARE pro_tmin NUMERIC(20,2);
DECLARE pro_type int DEFAULT 0;

/** 变量定义,传感器十进制编号**/
DECLARE pro_sensor_serial int;
DECLARE Done INT DEFAULT 0;
DECLARE no_more_record INT DEFAULT 0;

/* 声明游标,所有的传感器编号 */
DECLARE all_sensorserial CURSOR FOR select sensor_serial from dev_sensor_base GROUP BY sensor_serial;
/* 异常处理 */

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1;
/* 打开游标 */
OPEN all_sensorserial;

FETCH all_sensorserial into pro_sensor_serial; -- 取数据
WHILE no_more_record != 1 DO
-- current 表中是否有数据,如果current表中无数据就插入history表中最新的数据;如果有数据修改成history中最新的数据
select count(*) into ishave from data_current where sensorid=pro_sensor_serial;
if ishave=0 then
INSERT INTO data_current select * from data_history where sensorid=pro_sensor_serial ORDER BY gatewaytime desc LIMIT 1;
ELSE

select
id,
gatewayid,sensorid,sensorhex,temperature,humidity,power,gatewaytime,dyear,dmonth,dday,
dhour,dmin,workingTime,hmax,hmin,tmax,tmin,type
into
pro_id,
pro_gatewayid,
pro_sensorid,
pro_sensorhex,
pro_temperature,
pro_humidity,
pro_power,
pro_gatewaytime,
pro_dyear ,
pro_dmonth,
pro_dday,
pro_dhour,
pro_dmin,
pro_workingTime,
pro_hmax,
pro_hmin,
pro_tmax,
pro_tmin,
pro_type
from data_history where sensorid=pro_sensor_serial ORDER BY gatewaytime desc LIMIT 1;

update data_current set

gatewayid = pro_gatewayid,
sensorid = pro_sensorid,
sensorhex = pro_sensorhex,
temperature = pro_temperature,
humidity = pro_humidity,
power = pro_power,
gatewaytime = pro_gatewaytime,
dyear = pro_dyear ,
dmonth = pro_dmonth,
dday = pro_dday,
dhour = pro_dhour,
dmin = pro_dmin,
workingTime = pro_workingTime,
hmax = pro_hmax,
hmin = pro_hmin,
tmax = pro_tmax,
tmin = pro_tmin,
type = pro_type where sensorid=pro_sensor_serial;
end if;
FETCH all_sensorserial into pro_sensor_serial; -- 取数据
END WHILE;


/* 关闭游标 */
CLOSE all_sensorserial;
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值