Det är ett mycket irriterande MySQL-syntaxrelaterat problem:Det finns en TAB någonstans i din procedur som leder till det här analysproblemet:Använd endast mellanslag för indrag eller justering.
Min version (MariaDB 10.x) gillar inte heller starten av din procedur med DECLARE
beställning, så jag uppdaterade också det. Se om det fortfarande passar ditt syfte på den platsen.
Den justerade proceduren som min databas skapar utan syntaxfel:
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
$$