首页 > 解决方案 > MySQL 存储过程分隔符错误

问题描述

我正在尝试实现一个存储过程来创建用户余额的快照,但我总是在第 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//

分隔符;

标签: mysqlsqlstored-procedures

解决方案


MySQL 存储过程、函数等有一些关于可以在何处声明变量的规则。通常,块的开始是最好的;尽管某些类型的局部变量必须在其他变量之后声明。

在寻找细节时,这是一个很好的参考,可以从 MySQL 文档开始。


推荐阅读