mysql存儲過程中的循環語句有哪些

mysql存儲過程中的循環語句有三種:1、WHILE循環語句,語法“WHILE 條件表達式 DO 循環語句 END WHILE”;2、REPEAT循環語句,語法“REPEAT 循環語句 UNTIL 條件表達式 END REPEAT”;3、LOOP循環語句,語法“[begin_label:] LOOP 條件和循環語句列表 END LOOP [end_label]”。

mysql存儲過程中的循環語句有哪些

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

MySQL提供了循環語句,允許您根據條件重復執行一段SQL代碼。有三種循環語句在MySQL:?WHILE,REPEAT?和LOOP。

WHILE循環

WHILE語句的語法如下:

WHILE?expression?DO ???statements END?WHILE

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

以下流程圖說明了WHILE循環語句:

mysql存儲過程中的循環語句有哪些

以下是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?<p>在test_mysql_while_loop上面的存儲過程中:</p>
  • 首先,我們str 重復構建字符串,直到x 變量的值? 大于5。

  • 然后,我們使用SELECT語句顯示最終字符串。

請注意,如果我們不初始化? x變量,則其默認值為NULL。因此,WHILE循環語句中的條件始終是TRUE 并且您將具有無限循環,這不是期望的。

我們來測試一下test_mysql_while_loop存儲過程:

CALL?test_mysql_while_loop();

輸出結果:

mysql存儲過程中的循環語句有哪些

REPEAT循環

REPEAT 循環語句的語法如下:

REPEAT ?statements UNTIL?expression END?REPEAT

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

因為REPEAT 循環語句expression 在執行后檢查statements,所以REPEAT循環語句也稱為測試后循環。

以下流程圖說明了REPEAT循環語句:

mysql存儲過程中的循環語句有哪些

我們可以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?&gt;?5? 	END?REPEAT; 	SELECT?str; END?$$ DELIMITER?;

注意UNTIL?表達式中沒有分號(;)。

CALL?mysql_test_repeat_loop();

輸出結果:

mysql存儲過程中的循環語句有哪些

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?&gt;?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();

mysql存儲過程中的循環語句有哪些

在這個例子中,

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

  • 我們loop_label? 在LOOP聲明之前放置了一個循環標簽。

  • 如果值? x 大于10,則由于LEAVE語句而終止循環。

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

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

【相關推薦:mysql視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享