MySQL存储过程中的循环

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

复制代码

复制代码

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

复制代码

发布了266 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_18671415/article/details/105410479