MySQL调用存储过程报Invalid use of group function错误如何解决
报错原因说明
你的判断是正确的,问题确实出在SET nbrSeats = COUNT(Seats.id);这行代码:
COUNT()是SQL的聚合函数,必须在SELECT查询的上下文中使用,不能直接通过SET命令结合聚合函数给变量赋值- 这行代码没有指定查询的数据源(缺少
FROM Seats的查询逻辑),MySQL无法识别你要统计的是Seats表的总记录数,因此抛出了Invalid use of group function的错误。
修正方案
只需要把统计总记录数的逻辑改成SELECT ... INTO的写法即可,修改后的存储过程如下:
DELIMITER // CREATE PROCEDURE Test() BEGIN DECLARE x INT; DECLARE nbrSeats INT; SET x = 1; -- 替换原来的COUNT赋值行,用SELECT查询统计总数存入变量 SELECT COUNT(id) INTO nbrSeats FROM Seats; WHILE x < nbrSeats DO UPDATE Seats SET Seats.id = 0 WHERE Seats.id = x+1; UPDATE Seats SET Seats.id = x+1 WHERE Seats.id = x; UPDATE Seats SET Seats.id = x WHERE Seats.id = 0; SET x = x+2; END WHILE; END //
修改后再执行调用逻辑,就能得到你预期的结果了。你当前采用的临时id=0做中转的交换逻辑顺序是合理的,不会触发主键重复的约束问题。
内容的提问来源于stack exchange,提问作者matte_studenten
相关产品推荐
相关产品推荐

