我的问题听起来可能很蹩脚,但我仍然无法弄清楚这段代码有什么问题。我在sqlyog中做了一个存储过程,现在我想调用它。我已经尝试了几乎所有方法,但它不起作用。
SET @x=1;
WHILE @x<=10 DO
CALL mypro();
SET @x=@x+1;
END WHILE;
提前致谢。
最佳答案
IF, WHILE
等流程控制语句需要在函数或存储过程的上下文中执行。如果您希望在循环中执行 mypro()
,则该操作本身必须创建为过程。下面我将创建一个名为 call_mypro_x10()
的过程,它在 WHILE
循环中调用您的原始存储过程。
DELIMITER $$
CREATE PROCEDURE call_mypro_x10()
BEGIN
SET @x = 1;
WHILE @x <= 10 DO
CALL mypro();
SET @x := @x + 1;
END WHILE;
END$$
DELIMITER ;
然后调用包装另一个的过程:
CALL call_mypro_x10();
请注意,DELIMITER
语句可能并非在所有客户端中都是必需的,并且某些 MySQL 客户端提供了一种不同的方法来指定存储过程和函数定义中所需的备用分隔符。显然 SQLyog supports DELIMITER
有an open feature request允许流控制语句作为正常查询执行的一部分。
关于mysql - 如何在mysql中使用while循环调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15029038/