これは非常に厄介なMySQL構文関連の問題です。プロシージャのどこかにタブがあり、この解析の問題が発生します。スペースはインデントまたは配置にのみ使用してください。
私のバージョン(MariaDB 10.x)も、DECLARE
を使用してプロシージャを開始するのが好きではありません。 注文したので、それも更新しました。それでもその場所での目的に合っているかどうかを確認してください。
私のデータベースが構文エラーなしで作成する調整された手順:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_gauge_values` (in maxdate timestamp, in tagid int)
BEGIN
declare finished boolean;
declare line_timestamp timestamp;
declare line_tagid int;
declare line_name varchar(50);
declare line_value varchar(50);
DECLARE cid CURSOR FOR
SELECT MAX(hd.timestamp), hd.tag_id
FROM dashboard_lines dl
JOIN historical_data hd ON hd.tag_id = dl.gauge_tag_id
WHERE (hd.timestamp is null OR hd.timestamp <= maxdate)
AND (dl.gauge_tag_id is null OR dl.gauge_tag_id = tagid);
declare continue handler for not found set finished=true;
set finished=false;
DROP TABLE IF EXISTS GAUGE_VALUES_TEMP;
CREATE TABLE GAUGE_VALUES_TEMP (
LINE_NAME varchar(255),
LINE_VALUE varchar(50)
);
open cid;
start_loop: loop
fetch cid into line_timestamp, line_tagid;
if finished <> false then
leave start_loop;
else
insert into gauge_values_temp (line_name, line_value)
select ol.name, hd.value
from dashboard_lines dl
join operation_lines ol on ol.line_id = dl.line_id
join historical_data hd on hd.tag_id = dl.gauge_tag_id
where dl.gauge_tag_id = line_tagid;
end if;
end loop;
close cid;
select * from gauge_values_temp;
END
$$