我正在尝试使用此脚本在存储过程中运行游标循环:
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/