MySQL 游标循环中的语法错误
MySQL Syntax error in cursor loop
我正在尝试 运行 使用此脚本在存储过程中进行游标循环:
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*
我正在尝试 运行 使用此脚本在存储过程中进行游标循环:
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*