MariaDB 用户过程无限循环
MariaDB User procedure loops endlessly
我有以下存储过程来计算 运行 平均值。但是,当被调用时,它会永远运行。
delimiter //
CREATE PROCEDURE run_avg(date_start DATE,date_end DATE,pol_id TINYINT,sta_id TINYINT)
NOT DETERMINISTIC
CONTAINS SQL
BEGIN
TRUNCATE average_table;
WHILE date_start <= date_end DO
INSERT INTO average_table(value_avg)
SELECT AVG(a.value) as val
FROM (SELECT value FROM obs_all_unik
WHERE start_time >=date_start
AND start_time < date_start + INTERVAL 8 HOUR
AND polutant_id=pol_id
AND station_id=sta_id) AS a;
SET date_start = date_start + INTERVAL 1 HOUR;
END WHILE;
END;//
delimiter ;
有什么想法吗?
INDEX(station_id, polution_id, start_date)
将有助于提高性能。
只将平均值插入 table 而不同时插入这些值似乎是错误的:station_id, polution_id, start_date
.
无限循环是由于错误地将 date_start 定义为 DATE。因为我试图按小时递增,所以它返回了一个相同的值。我将其更改为 TIMESTAMP,现在问题消失了。
我有以下存储过程来计算 运行 平均值。但是,当被调用时,它会永远运行。
delimiter //
CREATE PROCEDURE run_avg(date_start DATE,date_end DATE,pol_id TINYINT,sta_id TINYINT)
NOT DETERMINISTIC
CONTAINS SQL
BEGIN
TRUNCATE average_table;
WHILE date_start <= date_end DO
INSERT INTO average_table(value_avg)
SELECT AVG(a.value) as val
FROM (SELECT value FROM obs_all_unik
WHERE start_time >=date_start
AND start_time < date_start + INTERVAL 8 HOUR
AND polutant_id=pol_id
AND station_id=sta_id) AS a;
SET date_start = date_start + INTERVAL 1 HOUR;
END WHILE;
END;//
delimiter ;
有什么想法吗?
INDEX(station_id, polution_id, start_date)
将有助于提高性能。
只将平均值插入 table 而不同时插入这些值似乎是错误的:station_id, polution_id, start_date
.
无限循环是由于错误地将 date_start 定义为 DATE。因为我试图按小时递增,所以它返回了一个相同的值。我将其更改为 TIMESTAMP,现在问题消失了。