天天看點

MySql存儲過程—6、循環

在MySql的存儲過程中可使用的循環有三種:WHILE、REPEAT、LOOP

1、WHILE

WHILE的格式是這樣的:

WHILE expression DO
   Statements
END WHILE
           

下面是個例子

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`WhileLoopProc` $$
CREATE PROCEDURE `test`.`WhileLoopProc` ()
BEGIN
 DECLARE x  INT;
 DECLARE str  VARCHAR(255);
 SET x = 1;
 SET str =  '';
 WHILE x  <= 5 DO
     SET  str = CONCAT(str,x,',');
     SET  x = x + 1;
 END WHILE;
 SELECT str;
END $$

DELIMITER ;
           

上面的例子最後輸出“1,2,3,4,5,”這樣的字元。

2、REPEAT

REPEAT的格式是這樣的:

REPEAT
Statements;
UNTIL expression
END REPEAT
           

REPEAT好比我們程式設計裡面的do...while一樣。這邊例子就不舉了,同上面的類似。

3、LOOP 及 LEAVE、ITERATE

這裡LOOP用來标記循環;而LEAVE表示離開循環,好比程式設計裡面的break一樣;ITERATE則繼續循環,類型與程式設計裡面的continue。

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`LoopProc` $$
CREATE PROCEDURE `test`.`LoopProc` ()
BEGIN
DECLARE x  INT;
DECLARE str  VARCHAR(255);
SET x = 1;
SET str =  '';
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,',');
  END  IF;

END LOOP;
SELECT str;
END $$

DELIMITER ;
           

上面代碼輸出10以内的偶數,用逗号分隔。這裡注意到x>10的時候就LEAVE掉,如果遇到奇數則ITERATE,奇數對2取模為1,表示true