web-dev-qa-db-fra.com

Puis-je exécuter une boucle dans MySQL sans utiliser de procédure/fonction?

Pour les tests, est-il possible d'exécuter une boucle à partir de MySQL Workbench ou d'un outil similaire? J'ai essayé mais j'ai eu une erreur.

Si cela est possible, veuillez fournir un exemple simple que je peux exécuter.

18
Mr. Boy

Vous ne pouvez pas faire de boucle for dans un éditeur SQL sans procédure stockée. J'utilise TOAD pour MySQL .

Une procédure stockée rapide devrait faire l'affaire:

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 ;
14
Thanu

Il y a une astuce avec des cas d'utilisation limités qui est "semblable à une boucle".

Je voulais créer un grand tableau de lignes (1 ~ 2 millions) de nombres entiers aléatoires pour un test:

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;

Alors, j'ai rapidement continué à doubler le nombre de lignes jusqu'à obtenir ce dont j'avais besoin.

2
Kache

Si vous voulez uniquement bloquer le thread actuel, utilisez select sleep(seconds);, sinon vous pouvez utiliser une procédure stockée (si vous souhaitez effectuer une boucle) ou une fonction UDF (définie par l'utilisateur).

0
Mike Lischke

Si vous avez déjà une table arbitraire myOldTable suffisamment longue, vous pouvez utiliser le truc suivant:

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