There are three standard loops in the MySQL stored procedure statement: WHILE loop, LOOP loop and REPEAT loop. There is also a non-standard looping method: GOTO, but this looping method is best not to use, it is easy to cause confusion in the program, here is a good introduction.
The format of these loop statements is as follows:
WHILE ... DO ... END WHILE
REPEAT ... UNTIL END REPEAT
LOOP ... END LOOP
GOTO.
Let's first write an example using the first loop.
DROP PROCEDURE IF EXISTS `pro10`; DELIMITER $$ CREATE PROCEDURE `pro10`() BEGIN -Define variables DECLARE v_i int unsigned DEFAULT 0; WHILE v_i < 5 DO SELECT v_i; SET v_i = v_i+1; END WHILE; END $$ DELIMITER ; CALL pro10();
Let's take a look at the second loop control instruction REPEAT ... END REPEAT. Use the REPEAT loop control statement to write the following stored procedure:
DROP PROCEDURE IF EXISTS `pro11`; DELIMITER $$ CREATE PROCEDURE `pro11`() BEGIN -Define variables DECLARE v_i int unsigned DEFAULT 0; REPEAT SELECT v_i; SET v_i = v_i+1; UNTIL v_i >= 5 END REPEAT; END $$ DELIMITER ; CALL pro11();
Let's take a look at the third loop control statement LOOP ...... END LOOP. Write a stored procedure program as follows:
DROP PROCEDURE IF EXISTS `pro12`; DELIMITER $$ CREATE PROCEDURE `pro12`() BEGIN -Define variables DECLARE v_i int unsigned DEFAULT 0; LOOP_LABEL:LOOP SELECT v_i; SET v_i = v_i+1; IF v_i >= 5 THEN LEAVE LOOP_LABEL; END IF; END LOOP; END $$ DELIMITER ; CALL pro12();
DROP PROCEDURE IF EXISTS `pro13`; DELIMITER $$ CREATE PROCEDURE `pro13`() BEGIN -Define variables DECLARE v_i int unsigned DEFAULT 0; LOOP_LABEL:LOOP IF v_i = 3 THEN SET v_i = v_i+1; ITERATE LOOP_LABEL; # => continue END IF; SELECT v_i; SET v_i = v_i+1; IF v_i >= 5 THEN LEAVE LOOP_LABEL; # => break; END IF; END LOOP; END $$ DELIMITER ; CALL pro13();