2

我的问题可能听起来很蹩脚,但我仍然无法理解这段代码有什么问题。我在 sqlyog 中创建了一个存储过程,现在我想调用它。我几乎尝试了所有方法,但它不起作用。

 SET @x=1;
 WHILE @x<=10 DO
 CALL mypro();
 SET @x=@x+1;
 END WHILE;

提前致谢。

4

1 回答 1

6

流控制语句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 支持DELIMITER

一个开放的功能请求允许流控制语句作为正常查询执行的一部分。

于 2013-02-22T16:59:46.883 回答