zoukankan      html  css  js  c++  java
  • MySQL 存储过程循环

    MySQL  存储过程循环

    MySQL循环语句(包括WHILEREPEATLOOP)来根据条件反复运行代码块。

    MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块。 MySQL中有三个循环语句:WHILEREPEATLOOP

    我们将在以下部分中更详细地检查每个循环语句。

    WHILE循环

    WHILE语句的语法如下:

    WHILE expression DO
       statements
    END WHILE

    WHILE循环在每次迭代开始时检查表达式。 如果expressionTRUE,MySQL将执行WHILEEND WHILE之间的语句,直到expressionFALSE。 WHILE循环称为预先测试条件循环,因为它总是在执行前检查语句的表达式。

    下面的流程图说明了WHILE循环语句:

    以下是在存储过程中使用WHILE循环语句的示例:

    DELIMITER $$
     DROP PROCEDURE IF EXISTS test_mysql_while_loop$$
     CREATE PROCEDURE test_mysql_while_loop()
     BEGIN
     DECLARE x  INT;
     DECLARE str  VARCHAR(255);
    
     SET x = 1;
     SET str =  '';
    
     WHILE x  <= 5 DO
     SET  str = CONCAT(str,x,',');
     SET  x = x + 1; 
     END WHILE;
    
     SELECT str;
     END$$
    DELIMITER ;

    在上面的test_mysql_while_loop存储过程中:

    • 首先,重复构建str字符串,直到x变量的值大于5
    • 然后,使用SELECT语句显示最终的字符串。

    要注意,如果不初始化x变量的值,那么它默认值为NULL。 因此,WHILE循环语句中的条件始终为TRUE,并且您将有一个不确定的循环,这是不可预料的。

    下面来测试test_mysql_while_loopstored调用存储过程:

    CALL test_mysql_while_loop();

    执行上面查询语句,得到以下结果 

    mysql> CALL test_mysql_while_loop();
    +------------+
    | str        |
    +------------+
    | 1,2,3,4,5, |
    +------------+
    1 row in set
    
    Query OK, 0 rows affected

    REPEAT循环

    REPEAT循环语句的语法如下:

    REPEAT
     statements;
    UNTIL expression
    END REPEAT

    首先,MySQL执行语句,然后评估求值表达式(expression)。如果表达式(expression)的计算结果为FALSE,则MySQL将重复执行该语句,直到该表达式计算结果为TRUE

    因为REPEAT循环语句在执行语句后检查表达式(expression),因此REPEAT循环语句也称为测试后循环。

    下面的流程图说明了REPEAT循环语句的执行过程:

    我们可以使用REPEAT循环语句重写test_mysql_while_loop存储过程,使用WHILE循环语句: 

    DELIMITER $$
     DROP PROCEDURE IF EXISTS mysql_test_repeat_loop$$
     CREATE PROCEDURE mysql_test_repeat_loop()
     BEGIN
     DECLARE x INT;
     DECLARE str VARCHAR(255);
    
     SET x = 1;
            SET str =  '';
    
     REPEAT
     SET  str = CONCAT(str,x,',');
     SET  x = x + 1; 
            UNTIL x  > 5
            END REPEAT;
    
            SELECT str;
     END$$
    DELIMITER ;

    要注意的是UNTIL表达式中没有分号(;)。

    执行上面查询语句,得到以下结果 

    mysql> CALL mysql_test_repeat_loop();
    +------------+
    | str        |
    +------------+
    | 1,2,3,4,5, |
    +------------+
    1 row in set
    
    Query OK, 0 rows affected

    LOOP,LEAVE和ITERATE语句

    有两个语句允许您用于控制循环:

    • LEAVE语句用于立即退出循环,而无需等待检查条件。LEAVE语句的工作原理就类似PHPC/C++Java等其他语言的break语句一样。
    • ITERATE语句允许您跳过剩下的整个代码并开始新的迭代。ITERATE语句类似于PHPC/C++Java等中的continue语句。

    MySQL还有一个LOOP语句,它可以反复执行一个代码块,另外还有一个使用循环标签的灵活性。

    以下是使用LOOP循环语句的示例。

    CREATE PROCEDURE test_mysql_loop()
     BEGIN
     DECLARE x  INT;
            DECLARE str  VARCHAR(255);
    
     SET x = 1;
            SET str =  '';
    
     loop_label:  LOOP
     IF  x > 10 THEN 
     LEAVE  loop_label;
     END  IF;
    
     SET  x = x + 1;
     IF (x mod 2) THEN
         ITERATE  loop_label;
     ELSE
        SET  str = CONCAT(str,x,',');
     END IF;
        END LOOP;    
        SELECT str;
    END;
    • 以上存储过程仅构造具有偶数字符串的字符串,例如2,4,6等。
    • LOOP语句之前放置一个loop_label循环标签。
    • 如果x的值大于10,则由于LEAVE语句,循环被终止。
    • 如果x的值是一个奇数,ITERATE语句忽略它下面的所有内容,并开始一个新的迭代。
    • 如果x的值是偶数,则ELSE语句中的块将使用偶数构建字符串。

    执行上面查询语句,得到以下结果 

    mysql> CALL test_mysql_loop();
    +-------------+
    | str         |
    +-------------+
    | 2,4,6,8,10, |
    +-------------+
    1 row in set
    
    Query OK, 0 rows affected
  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/BlueSkyyj/p/10436301.html
Copyright © 2011-2022 走看看