私の質問はつまらないように聞こえるかもしれませんが、それでもこのコードで何が悪いのかわかりません。sqlyogでストアドプロシージャを作成しましたが、これを呼び出したいと思います。私はほとんどすべてを試しましたが、うまくいきません。
SET @x=1;
WHILE @x<=10 DO
CALL mypro();
SET @x=@x+1;
END WHILE;
前もって感謝します。
私の質問はつまらないように聞こえるかもしれませんが、それでもこのコードで何が悪いのかわかりません。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はサポートしていますDELIMITER
通常のクエリ実行の一部としてフロー制御ステートメントを許可するオープン機能要求があります。