【发布时间】:2019-12-03 17:56:40
【问题描述】:
我正在尝试在存储过程中使用准备好的语句。我在初始 SET @idToUpdateQuery 中遇到语法错误。我已经知道 CONCAT 没有使用 := 进行变量赋值的工作正常,因为它在其他地方使用并按预期工作。本质上,我只需要能够将准备好的 SELECT 语句的结果放入变量@resultId 中。有问题的代码如下:
SET @distinctTableXIds = (SELECT COUNT(*) FROM tempTableX);
SET @i = 0;
WHILE @i < @distinctTableXIds DO
/*CONCAT IS NEEDED HERE TO PASS USER DEFINED @i*/
SET @idToUpdateQuery = CONCAT('SELECT @result := MAX(id)
FROM tableY
WHERE tableZId = (SELECT id FROM tempTableX ORDER BY id LIMIT ', @i, ', 1)');
PREPARE @IdToUpdateStmt FROM @IdToUpdateQuery;
EXECUTE @IdToUpdateStmt;
SET @resultId = SELECT @result;
UPDATE tableY
SET someBoolean = 1
WHERE id = @resultId;
SET @i = @i + 1;
END WHILE;
【问题讨论】:
-
SET @idToUpdateQuery = CONCAT(..);中没有语法错误。但是PREPARE @IdToUpdateStmt FROM @IdToUpdateQuery;看起来不正确。尝试不使用@。 -
在盯着这个至少一个小时之后,我在刷新这个页面之前得出了同样的结论。谢谢。
标签: mysql stored-procedures prepared-statement variable-assignment do-while