在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。
这几个循环语句的格式如下:
WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP
GOTO。
下面首先使用第一种循环编写一个例子。
DROP PROCEDURE IF EXISTS `pro10`; DELIMITER $$ CREATE PROCEDURE `pro10`() BEGIN -- 定义变量 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();
再来看一下第二个循环控制指令 REPEAT……END REPEAT。使用REPEAT循环控制语句编写下面这个存储过程:
DROP PROCEDURE IF EXISTS `pro11`; DELIMITER $$ CREATE PROCEDURE `pro11`() BEGIN -- 定义变量 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();
再来看一下第三个循环控制语句LOOP……END LOOP。编写一个存储过程程序如下:
DROP PROCEDURE IF EXISTS `pro12`; DELIMITER $$ CREATE PROCEDURE `pro12`() BEGIN -- 定义变量 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();
扫描二维码关注公众号,回复:
10659588 查看本文章
DROP PROCEDURE IF EXISTS `pro13`; DELIMITER $$ CREATE PROCEDURE `pro13`() BEGIN -- 定义变量 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();