REPEAT-UNTIL循环

  [loopname]:REPEAT

      commands;

  UNTIL condition

  END REPEAT [loopname];

  在这种循环里,关键字repeatuntil之间的语句将一直循环执行到给定条件第一次得到满足为止,因为对条件表达式的求值发生在每次循环的末尾,所以整个循环语句至少会执行一次。下面的test(n)函数将返回一个包含着n+1个“*”字符的字符串 MySQL的循环语句使用总结

 1 CREATE FUNCTION test(n,INT) RETURNS TEXT
 2 BEGIN
 3 DECLARE i INT DEFAULT 0;
 4 DECLARE s  TEXT DEFAULT ' ';
 5 myloop: REPEAT
 6  SET i=i+1;
 7  SET s=CONCAT(s,"*");
 8 UNTIL i>n END REPEAT;
 9     RETURN s;
10 END

 

WHILE循环

 [loopname]:WHILE condition DO

      commands;

  END WHILE [loopname];

1 CREATE PROCEDURE test()
2 BEGIN
3 DECLARE i INT DEFAULT 0;
4 WHILE i<40 DO 
5  INSERT INTO authors(authName) VALUES (CONCAT('authname',i));
6  SET i=i+1;
7 END WHILE;
8 END

 

 LOOP循环

  loopname:LOOP

      commands;

  END LOOP loopname;

   改造repeat-until循环的例子

 1 CREATE FUNCTION test(n,INT) RETURNS TEXT
 2 BEGIN
 3  DECLARE i INT DEFAULT 0;
 4  DECLARE s TEXT DEFAULT ' ';
 5  myloop:LOOP
 6   SET i=i+1;
 7   SET s=CONCAT(s,"*");
 8   IF i>n THEN LEAVE myloop;END IF;
 9 END LOOP myloop;
10 RETURN s;
11 END

LEAVE和ITERATE语句

  LEAVE loopname命令将使程序代码的执行流程跳出一个循环,还可以用来提前退出BEGIN-END语句块

  ITERATE loopname命令的效果是把循环体里的命令再执行一遍。ITERATE命令不能像LEAVE命令那样在BEGIN-END语句块里使用

 1 CREATE PROCEDURE myProc(IN in_count INT)
 2 BEGIN
 3 DECLARE  num INT DEFAULT 0;
 4 increment:LOOP
 5 SET num=num+1;
 6 IF num<20 THEN ITERATE increment;END IF;
 7 IF num>in_count THEN LEAVE increment;
 8 END IF;
 9 END LOOP increment;
10 SELECT num;
11 END

调用存储过程 CAll myProc(5); 输出 20