MySQL SP中的update语句显示缺少结束错误

MySQL SP中的update语句显示缺少结束错误,mysql,stored-procedures,sql-update,Mysql,Stored Procedures,Sql Update,我有一个如下所示的存储过程。游标声明之前的update语句中显示错误。当我删除游标语句时,存储过程工作正常。为什么游标语句之前不能有update语句 DROP PROCEDURE IF EXISTS GenerateAlert; DELIMITER $$ CREATE PROCEDURE GenerateAlert() BEGIN DECLARE done INTEGER DEFAULT FALSE; DECLARE temp_project_id INT DEFAULT 0;

我有一个如下所示的存储过程。游标声明之前的update语句中显示错误。当我删除游标语句时,存储过程工作正常。为什么游标语句之前不能有update语句

DROP PROCEDURE IF EXISTS GenerateAlert;
DELIMITER $$
CREATE PROCEDURE GenerateAlert()
BEGIN
    DECLARE done INTEGER DEFAULT FALSE;
    DECLARE temp_project_id INT DEFAULT 0;
    DECLARE temp_finish_time DATETIME DEFAULT NOW();
    DECLARE _message_class INT DEFAULT 3;
    DECLARE proj_user_id INT DEFAULT 0;


    -- get message text template
    DECLARE message_template VARCHAR(255) DEFAULT 
    (
        SELECT alert_message_template FROM alerts WHERE id = 6
    );



    -- get maximum allowed minutes
    DECLARE allowed_time INT DEFAULT 
    (
        SELECT alert_value_1 FROM alerts WHERE id = 4
    );

    -- flag all messages with class 3 to deleted = true
    UPDATE messages 
    SET is_deleted = 1
    WHERE messages_class = 3;

    DECLARE _cur CURSOR FOR 
        SELECT d.project_id, MAX(finish_time)
        FROM 
            client_docs AS d INNER JOIN 
            issues AS i ON d.project_id = i.project_id INNER JOIN 
            working_times AS t ON i.id = t.issue_id 
        WHERE 
            d.status = 1 AND
            t.finish_time IS NOT NULL AND 
            t.category = 1
        GROUP BY d.project_id;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN _cur;
    read_loop: LOOP

        FETCH _cur INTO temp_project_id, temp_finish_time;

        IF done THEN
            LEAVE read_loop;
        END IF;

        -- add more minutes to finish time
        SET temp_finish_time = DATE_ADD(temp_finish_time, INTERVAL allowed_time MINUTE);

        IF temp_finish_time < NOW() THEN

                -- this project must be alerted

                -- get project user
                SELECT c.staff INTO proj_user_id 
                FROM
                    projects AS p INNER JOIN 
                    clients AS c ON p.client_id = c.id
                WHERE 
                    p.id = temp_project_id;





        END IF;

    END LOOP read_loop;
    CLOSE _cur;


END
$$
DELIMITER ;

找到答案:声明语句必须位于MySQL存储过程中任何其他事务语句之前。 答案中的第二条注释。

可能重复