溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

發(fā)布時(shí)間:2022-06-20 13:37:59 來(lái)源:億速云 閱讀:5100 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

今天小編給大家分享一下mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句有三種:1、WHILE循環(huán)語(yǔ)句,語(yǔ)法“WHILE 條件表達(dá)式 DO 循環(huán)語(yǔ)句 END WHILE”;2、REPEAT循環(huán)語(yǔ)句,語(yǔ)法“REPEAT 循環(huán)語(yǔ)句 UNTIL 條件表達(dá)式 END REPEAT”;3、LOOP循環(huán)語(yǔ)句,語(yǔ)法“[begin_label:] LOOP 條件和循環(huán)語(yǔ)句列表 END LOOP [end_label]”。

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

MySQL提供了循環(huán)語(yǔ)句,允許您根據(jù)條件重復(fù)執(zhí)行一段SQL代碼。有三種循環(huán)語(yǔ)句在MySQL: WHILE,REPEAT 和LOOP。

WHILE循環(huán)

WHILE語(yǔ)句的語(yǔ)法如下:

WHILE expression DO
   statements
END WHILE

WHILE 循環(huán)檢查expression在每次迭代的開(kāi)始。如果expression評(píng)估為TRUE,MySQL將 在評(píng)估statements之間執(zhí)行  WHILE,END WHILE直到expression評(píng)估為止FALSE。WHILE 循環(huán)稱為預(yù)測(cè)試循環(huán),因?yàn)樗?code>statements 執(zhí)行之前檢查表達(dá)式。

以下流程圖說(shuō)明了WHILE循環(huán)語(yǔ)句:

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

以下是WHILE 在存儲(chǔ)過(guò)程中使用循環(huán)語(yǔ)句的示例:

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上面的存儲(chǔ)過(guò)程中:

  • 首先,我們str 重復(fù)構(gòu)建字符串,直到x 變量的值  大于5。

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

請(qǐng)注意,如果我們不初始化  x變量,則其默認(rèn)值為NULL。因此,WHILE循環(huán)語(yǔ)句中的條件始終是TRUE 并且您將具有無(wú)限循環(huán),這不是期望的。

我們來(lái)測(cè)試一下test_mysql_while_loop存儲(chǔ)過(guò)程:

CALL test_mysql_while_loop();

輸出結(jié)果:

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

REPEAT循環(huán)

REPEAT 循環(huán)語(yǔ)句的語(yǔ)法如下:

REPEAT
 statements
UNTIL expression
END REPEAT

首先,MySQL執(zhí)行statements,然后評(píng)估expression。如果expression評(píng)估為FALSE,則MySQL statements 重復(fù)執(zhí)行直到expression 評(píng)估為止TRUE。

因?yàn)镽EPEAT 循環(huán)語(yǔ)句expression 在執(zhí)行后檢查statements,所以REPEAT循環(huán)語(yǔ)句也稱為測(cè)試后循環(huán)。

以下流程圖說(shuō)明了REPEAT循環(huán)語(yǔ)句:

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

我們可以test_mysql_while_loop使用WHILE loop語(yǔ)句重寫(xiě)上面使用REPEAT loop語(yǔ)句的存儲(chǔ)過(guò)程:

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 表達(dá)式中沒(méi)有分號(hào)(;)。

CALL mysql_test_repeat_loop();

輸出結(jié)果:

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

LOOP,LEAVE和ITERATE語(yǔ)句

有兩個(gè)語(yǔ)句允許您控制循環(huán):

  • LEAVE語(yǔ)句允許您立即退出循環(huán)而無(wú)需等待檢查條件。LEAVE語(yǔ)句的作用類(lèi)似于PHP,C / C ++和Java等其他語(yǔ)言中的 break 語(yǔ)句。

  • ITERATE語(yǔ)句允許您跳過(guò)其下的整個(gè)代碼并開(kāi)始新的迭代。ITERATE語(yǔ)句類(lèi)似于PHP,C / C ++和Java中的continue語(yǔ)句。

MySQL還為您提供了LOOP一個(gè)重復(fù)執(zhí)行代碼塊的語(yǔ)句,并具有使用循環(huán)標(biāo)簽的額外靈活性。

以下是使用LOOP 循環(huán)語(yǔ)句的示例:

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 ;

測(cè)試一下:

call test_mysql_loop();

mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)

在這個(gè)例子中,

  • 存儲(chǔ)過(guò)程僅構(gòu)造具有偶數(shù)的字符串,例如,2,4和6。

  • 我們loop_label  在LOOP聲明之前放置了一個(gè)循環(huán)標(biāo)簽。

  • 如果值  x 大于10,則由于LEAVE語(yǔ)句而終止循環(huán)。

  • 如果the的值x 是奇數(shù),則ITERATE 語(yǔ)句忽略其下的所有內(nèi)容并開(kāi)始新的迭代。

  • 如果the的值x 是偶數(shù),則ELSE語(yǔ)句中的塊將構(gòu)建具有偶數(shù)的字符串。

以上就是“mysql存儲(chǔ)過(guò)程中的循環(huán)語(yǔ)句怎么寫(xiě)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI