Hệ quản trị CSDL MySQL - Lệnh lặp trong SProcedure

Lệnh lặp trong SProcedure

Vòng lặp WHILE

Cú pháp:

WHILE expression DO
   Statements
END WHILE

Ví dụ:

DELIMITER $$
 DROP PROCEDURE IF EXISTS WhileLoopProc$$
 CREATE PROCEDURE 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 ;


Vòng lặp REPEAT

Cú pháp:

REPEAT
Statements;
UNTIL expression
END REPEAT

Ví dụ:

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


Vòng lặp LOOP – chỉ lệnh LEAVE và ITERATE

Lệnh LEAVE cho phép thoát ra khỏi vòng lặp hiện tại (tương tự như break của Java hay C#)

Lệnh ITERATE cho phép tiếp tục vòng lặp (tương tự lệnh continue của Java hay C#)

Ví dụ: một ví dụ tham khảo

DELIMITER $$
 DROP PROCEDURE IF EXISTS LOOPLoopProc$$
 CREATE PROCEDURE LOOPLoopProc()
       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$$