1、概述
开发MySQL存储过程时,经常需要写循环逻辑;MySQL中支持三种循环分别是WHILE循环,REPEAT循环以及LOOP循环。
循环语句的格式如下:
WHILE……DO……END WHILEREPEAT……UNTIL END REPEATLOOP……END LOOP
2、WHILE语句
[begin_label:] WHILE search_condition DO statement_listEND WHILE [end_label]
WHILE 只要search_condition表达式为真,就会重复执行statement_list语句。 statement_list由一个或多个SQL语句组成,每个语句以分号(;)隔开。
实例:
# 1.创建存储过程delimiter //CREATE PROCEDURE dowhile()BEGIN DECLARE v1 INT DEFAULT 5; WHILE v1 > 0 DO select v1; SET v1 = v1 - 1; END WHILE;END;//# 2.调用存储过程 call dowhile();
3、REPEAT语句
[begin_label:] REPEAT statement_listUNTIL search_conditionEND REPEAT [end_label]
REPEAT语句当search_condition结果为真时终止。REPEAT语句至少执行一次statement_list。
实例:
# 1.创建存储过程delimiter //CREATE PROCEDURE dorepeat(p1 INT)BEGIN SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;END//# 2.调用存储过程 CALL dorepeat(1000);SELECT @x;
3、LOOP语句
[begin_label:] LOOP statement_listEND LOOP [end_label]
LOOP语句实现了一个简单的循环结构,通常通过LEAVE语句来完成退出循环。
实例:
# 1.创建存储过程delimiter //drop procedure if exists doiterate;CREATE PROCEDURE doiterate(p1 INT)BEGIN label1: LOOP SET p1 = p1 + 1; select p1; IF p1 = 10 THEN LEAVE label1; END IF; END LOOP label1; SET @x = p1;END;//# 2.调用存储过程 call doiterate(5);select @x;