Я пытаюсь реализовать хранимую процедуру для создания моментального снимка пользовательских балансов, и я всегда получаю сообщение об ошибке в строке 5, что синтаксис неправильный, и я не нашел ответа на то, что не так с этим синтаксисом:
DROP PROCEDURE IF EXISTS createSnapshot;
DELIMITER //
CREATE PROCEDURE createSnapshot()
BEGIN
INSERT INTO balance_history (uid,coin_id,balance) SELECT uid,coin_id,amount FROM balance;
DECLARE done INT DEFAULT FALSE;
DECLARE cursor1 CURSOR FOR SELECT primary_key,timestamp FROM balance_history WHERE timestamp < DATE_SUB(NOW(), INTERVAL 7 DAY);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE id INT;
DECLARE time1 TIMESTAMP;
OPEN cursor1;
read_loop: LOOP;
IF done THEN
LEAVE read_loop;
END IF
FETCH cursor1 INTO id,time1;
END LOOP
CLOSE cursor1;
END//
DELIMITER;
MySQL хранимые процедуры, функции и т.д. Имеют некоторые правила о том, где переменные могут быть DECLAREd. Как правило, начало блока лучше; хотя определенные типы локальных переменных должны быть объявлены после других.
Это хорошая ссылка для начала в документации MySQL при поиске специфики.
id
иtime1
раньше.