我的问题可能听起来很蹩脚,但我仍然无法弄清楚这段代码是什么问题。我已经在sqlyog中创建了一个存储过程,现在我想调用它。我几乎尝试了所有东西,但它不起作用。
SET @x=1;
WHILE @x<=10 DO
CALL mypro();
SET @x=@x+1;
END WHILE;
提前致谢。
答案 0 :(得分: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 supports DELIMITER
有an open feature request允许流控制语句作为正常查询执行的一部分。