Loop in MySQL stored procedure

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.

Copy code

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();

Copy code

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:

Copy code

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();

Copy code

Let's take a look at the third loop control statement LOOP ...... END LOOP. Write a stored procedure program as follows:

Copy code

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();

Copy code

Copy code

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();

Copy code

Published 266 original articles · praised 17 · 10,000+ views

Guess you like

Origin blog.csdn.net/qq_18671415/article/details/105410479