MySQL游标循环中的语法错误

标签 mysql loops stored-procedures cursor syntax-error

我正在尝试使用此脚本在存储过程中运行游标循环:

CREATE PROCEDURE migrateMStruct()
BEGIN
DECLARE finished INT DEFAULT FALSE;
DECLARE msId BIGINT(20) UNSIGNED;
DECLARE luId INT(11);

DECLARE msCursor CURSOR FOR
    SELECT id, live_unit_id FROM mounting_structures
    WHERE live_unit_id IS NOT NULL;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;

OPEN msCursor;

read_loop: LOOP
    FETCH msCursor INTO msId, luId;
    IF finished THEN
        LEAVE read_loop;
    END IF;
    UPDATE live_units SET mountingStructureId = msId WHERE live_units.id = luId;
END LOOP;

CLOSE msCursor;
END;

我根据 MySQL 文档编写了这个脚本,但是在执行该脚本时我收到错误:

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use near '' 
at line 19

第 19 行只是 END IF; 语句。显然这不是世界上最有用的错误,但根据 MySQL 的文档,语法看起来是正确的。

最佳答案

我遇到了同样的错误,您必须临时更改分隔符,以防止 SQL 解释器发现分号时执行 ;

DELIMITER $$ 

CREATE PROCEDURE migrateMStruct()
BEGIN

  /*your procedure body*/

END$$

DELIMITER ;  /*back to previous delimiter*

关于MySQL游标循环中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679902/

相关文章:

jquery - 重复函数 X 次

MySql 从一次选择中设置多个变量

mysql - 在 MATLAB 中将查询中的字符串传递给 MySQL 数据库

php - 如何通过 Laravel 中数组中的对象保存数据

mysql - 在mysql中使用union和order by子句

mysql - 网站用户权限

PHP 在不使用列名的情况下动态回显查询结果列

java - 使用嵌入式 for 循环的 NxN 矩阵

sql-server - 必须在 sql 过程中声明标量变量

mysql - 错误 1329 : No data - zero rows fetched, 选择或处理 - 即使一切都正确完成