web-dev-qa-db-ja.com

プロシージャ/関数を使用せずにMySQLでループを実行できますか?

テストのために、MySQLワークベンチまたは同様のツールからループを実行することは可能ですか?試しましたがエラーが発生しました。

可能であれば、私が実行できる簡単な例を提供してください。

20
Mr. Boy

ストアドプロシージャがないと、SQLエディターでforループを実行できません。私は MySQLのTOAD を使用します。

クイックストアドプロシージャがその仕事をするはずです。

DELIMITER $$

DROP PROCEDURE IF EXISTS proc_loop_test$$
CREATE PROCEDURE proc_loop_test()
BEGIN
  DECLARE int_val INT DEFAULT 0;
  test_loop : LOOP
    IF (int_val = 10) THEN
      LEAVE test_loop;
    END IF;

    SET int_val = int_val +1;
    SELECT int_val; 
  END LOOP; 
END$$

DELIMITER ;
17
Thanu

「ループのような」限定されたユースケースのトリックがあります。

テスト用にランダムな整数の大きな(100万から200万)行テーブルを作成したいと思いました。

INSERT INTO test_table (num) VALUES(ROUND(Rand() * 1E6));

-- calling this will insert once for every row in test_table
INSERT INTO test_table (num)
SELECT ROUND(Rand() * 1E6)
FROM test_table;

そのため、必要な数になるまで、行の数を2倍に増やし続けました。

2
Kache

現在のスレッドのみをブロックしたい場合は、select sleep(seconds);を使用します。それ以外の場合は、ストアドプロシージャ(ループしたいものがある場合)またはUDF(ユーザー定義関数)を使用できます。

0
Mike Lischke

十分に長い任意のテーブルmyOldTableがすでにあるとすると、次のトリックを使用できます。

set @counter = 0;
select (@counter := @counter+1), @counter*@counter from myOldTable limit 1000;
0
Volker Raab