REPEAT-UNTIL循环
[loopname]:REPEAT
commands;
UNTIL condition
END REPEAT [loopname];
在这种循环里,关键字repeat和until之间的语句将一直循环执行到给定条件第一次得到满足为止,因为对条件表达式的求值发生在每次循环的末尾,所以整个循环语句至少会执行一次。下面的test(n)函数将返回一个包含着n+1个“*”字符的字符串
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