mysql儲存過程中的迴圈語句有哪些

2022-06-20 14:00:42

mysql儲存過程中的迴圈語句有三種:1、WHILE迴圈語句,語法「WHILE 條件表示式 DO 迴圈語句 END WHILE」;2、REPEAT迴圈語句,語法「REPEAT 迴圈語句 UNTIL 條件表示式 END REPEAT」;3、LOOP迴圈語句,語法「[begin_label:] LOOP 條件和迴圈語句列表 END LOOP [end_label]」。

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

MySQL提供了迴圈語句,允許您根據條件重複執行一段SQL程式碼。有三種迴圈語句在MySQL: WHILE,REPEAT 和LOOP。

WHILE迴圈

WHILE語句的語法如下:

WHILE expression DO
   statements
END WHILE

WHILE 迴圈檢查expression在每次迭代的開始。如果expression評估為TRUE,MySQL將 在評估statements之間執行 WHILEEND WHILE直到expression評估為止FALSE。WHILE 迴圈稱為預測試迴圈,因為它在statements 執行之前檢查表示式。

以下流程圖說明了WHILE迴圈語句:

1.jpg

以下是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_loop儲存過程:

CALL test_mysql_while_loop();

輸出結果:

2.png

REPEAT迴圈

REPEAT 迴圈語句的語法如下:

REPEAT
 statements
UNTIL expression
END REPEAT

首先,MySQL執行statements,然後評估expression。如果expression評估為FALSE,則MySQL statements 重複執行直到expression 評估為止TRUE。

因為REPEAT 迴圈語句expression 在執行後檢查statements,所以REPEAT迴圈語句也稱為測試後迴圈。

以下流程圖說明了REPEAT迴圈語句:

3.jpg

我們可以test_mysql_while_loop使用WHILE loop語句重寫上面使用REPEAT loop語句的儲存過程:

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 表示式中沒有分號(;)。

CALL mysql_test_repeat_loop();

輸出結果:

4.png

LOOP,LEAVE和ITERATE語句

有兩個語句允許您控制迴圈:

  • LEAVE語句允許您立即退出迴圈而無需等待檢查條件。LEAVE語句的作用類似於PHP,C / C ++和Java等其他語言中的 break 語句。

  • ITERATE語句允許您跳過其下的整個程式碼並開始新的迭代。ITERATE語句類似於PHP,C / C ++和Java中的continue語句。

MySQL還為您提供了LOOP一個重複執行程式碼塊的語句,並具有使用迴圈標籤的額外靈活性。

以下是使用LOOP 迴圈語句的範例:

DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_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 $$
DELIMITER ;

測試一下:

call test_mysql_loop();

5.png

在這個例子中,

  • 儲存過程僅構造具有偶數的字串,例如,2,4和6。

  • 我們loop_label 在LOOP宣告之前放置了一個迴圈標籤。

  • 如果值 x 大於10,則由於LEAVE語句而終止迴圈。

  • 如果the的值x 是奇數,則ITERATE 語句忽略其下的所有內容並開始新的迭代。

  • 如果the的值x 是偶數,則ELSE語句中的塊將構建具有偶數的字串。

【相關推薦:】

以上就是mysql儲存過程中的迴圈語句有哪些的詳細內容,更多請關注TW511.COM其它相關文章!