Maison  >  Article  >  base de données  >  Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

青灯夜游
青灯夜游original
2022-06-20 11:51:2910342parcourir

Il existe trois types d'instructions de boucle dans les procédures stockées MySQL : 1. Instruction de boucle WHILE, la syntaxe est "WHILE expression conditionnelle DO instruction de boucle END WHILE" 2. Instruction de boucle REPEAT, la syntaxe est "Instruction de boucle REPEAT UNTIL expression conditionnelle" ; END REPEAT"; 3. Instruction de boucle LOOP, syntaxe "[begin_label:] Condition LOOP et liste d'instructions de boucle END LOOP [end_label]".

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

MySQL fournit des instructions de boucle qui vous permettent d'exécuter à plusieurs reprises une section de code SQL en fonction de conditions. Il existe trois types d'instructions de boucle dans MySQL : WHILE, REPEAT et LOOP.

WHILE Loop

La syntaxe de l'instruction WHILE est la suivante :

WHILE expression DO
   statements
END WHILE

WHILE La boucle vérifie expression au début de chaque itération. Si expression est évalué à TRUE, MySQL exécutera WHILE, END WHILEinstructions / code>Jusqu'à ce que expression soit évalué FALSE. La boucle WHILE est appelée boucle de prétest car elle vérifie les expressions avant que les instructions ne soient exécutées. expression在每次迭代的开始。如果expression评估为TRUE,MySQL将 在评估statements之间执行  WHILEEND WHILE直到expression评估为止FALSE。WHILE 循环称为预测试循环,因为它在statements 执行之前检查表达式。

以下流程图说明了WHILE循环语句:

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

以下是WHILE 在存储过程中使用循环语句的示例:

DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_while_loop$$ 
CREATE PROCEDURE test_mysql_while_loop ( ) 
	BEGIN
	DECLARE x INT;
	DECLARE str VARCHAR ( 255 );
	SET x = 1;
	SET str = '';
	WHILE x <= 5 DO
		SET str = CONCAT( str, x, &#39;,&#39; );
		SET x = x + 1;
	END WHILE;
	SELECT str;
END $$
DELIMITER ;

在test_mysql_while_loop上面的存储过程中:

  • 首先,我们str 重复构建字符串,直到x 变量的值  大于5。

  • 然后,我们使用SELECT语句显示最终字符串。

请注意,如果我们不初始化  x变量,则其默认值为NULL。因此,WHILE循环语句中的条件始终是TRUE 并且您将具有无限循环,这不是期望的。

我们来测试一下test_mysql_while_loop存储过程:

CALL test_mysql_while_loop();

输出结果:

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

REPEAT循环

REPEAT 循环语句的语法如下:

REPEAT
 statements
UNTIL expression
END REPEAT

首先,MySQL执行statements,然后评估expression。如果expression评估为FALSE,则MySQL statements 重复执行直到expression 评估为止TRUE。

因为REPEAT 循环语句expression 在执行后检查statements

L'organigramme suivant illustre l'instruction de boucle WHILE :

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?Ce qui suit est un exemple d'utilisation de l'instruction de boucle WHILE dans une procédure stockée :

DELIMITER $$
DROP PROCEDURE IF EXISTS mysql_test_repeat_loop $$ 
CREATE PROCEDURE mysql_test_repeat_loop ( ) BEGIN
	DECLARE x INT;
	DECLARE str VARCHAR ( 255 );
	SET x = 1;
	SET str = &#39;&#39;;
	REPEAT
		SET str = CONCAT( str, x, &#39;,&#39; );
		SET x = x + 1;
	UNTIL x > 5 
	END REPEAT;
	SELECT str;
END $$
DELIMITER ;

Dans la procédure stockée ci-dessus test_mysql_while_loop :

Tout d'abord, nous construisons la chaîne str à plusieurs reprises jusqu'à ce que le variable x La valeur de est supérieure à 5.

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

Ensuite, nous utilisons une instruction SELECT pour afficher la chaîne finale.

Veuillez noter que si nous n'initialisons pas la variable x, sa valeur par défaut est NULL. Par conséquent, la condition dans l’instruction de boucle WHILE sera toujours TRUE et vous aurez une boucle infinie, ce qui n’est pas souhaité.

Testons la procédure stockée test_mysql_while_loop :

CALL mysql_test_repeat_loop();

Résultat de sortie :
  • Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

  • REPEAT loop

REPEAT La syntaxe de l'instruction de boucle est la suivante :

DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_loop $$ 
CREATE PROCEDURE test_mysql_loop() 
BEGIN
  DECLARE x INT;
  DECLARE str VARCHAR ( 255 );
  SET x = 1;
  SET str = &#39;&#39;;
  loop_label :LOOP
    IF x > 10 THEN
      LEAVE loop_label;
    END IF;
    SET x = x + 1;
    IF ( x MOD 2 ) THEN
      ITERATE loop_label;
    ELSE 
      SET str = CONCAT( str, x, &#39;,&#39; );
    END IF;
  END LOOP;
  SELECT str;
END $$
DELIMITER ;

Tout d'abord, MySQL exécute des instructions, puis évalue expression. Si expression est évalué à FALSE, les statements MySQL sont exécutés à plusieurs reprises jusqu'à ce que expression soit évalué à TRUE.

Étant donné que l'instruction de boucle REPEAT expression vérifie les instructions après l'exécution, l'instruction de boucle REPEAT est également appelée boucle post-test.

L'organigramme suivant illustre l'instruction de boucle REPEAT :

Quelles sont les instructions de boucle dans les procédures stockées MySQL ?

Nous pouvons tester_mysql_while_loop utiliser l'instruction de boucle WHILE pour réécrire la procédure stockée ci-dessus à l'aide de l'instruction de boucle REPEAT :
    call test_mysql_loop();
  • Notez qu'il n'y a pas de point-virgule (;) dans l'expression JUSQU'À.

    rrreee

    Résultats de sortie :
  • Instructions LOOP, LEAVE et ITERATE

  • Il y a deux instructions qui vous permettent de contrôler la boucle :

  • L'instruction LEAVE vous permet de quitter la boucle immédiatement sans en attendant de vérifier l'état. L'instruction LEAVE fonctionne de manière similaire à l'instruction break dans d'autres langages tels que PHP, C/C++ et Java.

L'instruction ITERATE vous permet de sauter tout le code en dessous et de démarrer une nouvelle itération. L'instruction ITERATE est similaire à l'instruction continue en PHP, C/C++ et Java.

🎜MySQL vous donne également l'instruction LOOP pour exécuter à plusieurs reprises un bloc de code, avec la flexibilité supplémentaire d'utiliser des étiquettes de boucle. 🎜🎜Voici un exemple d'utilisation de l'instruction de boucle LOOP : 🎜rrreee🎜Testez-la : 🎜🎜rrreee🎜🎜🎜🎜Dans cet exemple, 🎜🎜🎜🎜 la procédure stockée ne construit que des chaînes avec des nombres pairs, par exemple 2, 4 et 6 . 🎜🎜🎜🎜Nous plaçons une étiquette de boucle loop_label avant l'instruction LOOP. 🎜🎜🎜🎜Si la valeur x est supérieure à 10, la boucle est terminée grâce à l'instruction LEAVE. 🎜🎜🎜🎜Si la valeur de x est impaire, l'instruction ITERATE ignore tout ce qui se trouve en dessous et démarre une nouvelle itération. 🎜🎜🎜🎜Si la valeur de x est un nombre pair, le bloc dans l'instruction ELSE construira une chaîne avec un nombre pair. 🎜🎜🎜🎜【Recommandations associées : 🎜tutoriel vidéo mysql🎜】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn