您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在mysql存儲過程中使用WHILE,REPEAT和LOOP循環語句,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
MySQL提供循環語句,允許我們根據條件重復執行一個SQL代碼塊其中有三個循環語句:WHILE,REPEAT和LOOP,我們接下來分別看下。首先是WHILE語句來看下語法:
WHILE expression DO statements END WHILE
WHILE循環在每次迭代開始時檢查表達式。 如果expressionevaluates為TRUE,MySQL將執行WHILE和END WHILE之間的語句,直到expressionevaluates為FALSE。 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 statements; UNTIL expression END REPEAT
上述sql首先被mysql執行,完事mysql會評估求值表達式(expression),如果表達式(expression)的計算結果為FALSE,則mysql將重復執行該語句,直到該表達式計算結果為TRUE。因為REPEAT循環語句在執行語句后檢查表達式(expression),因此REPEAT循環語句也稱為測試后循環。咱們來看下流程圖:
完事咱們再來使用REPEAT循環語句重寫test_mysql_while_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表達式中沒有分號(;)。執行上面查詢語句,得到以下結果:
mysql> CALL mysql_test_repeat_loop(); +------------+ | str | +------------+ | 1,2,3,4,5, | +------------+ 1 row in set Query OK, 0 rows affected
最后咱們再來看一個使用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;
上述sql具體作用如下:
以上存儲過程僅構造具有偶數字符串的字符串,例如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
完事咱們再來看下控制循環的兩個關鍵詞:
LEAVE語句用于立即退出循環,而無需等待檢查條件。LEAVE語句的工作原理就類似PHP,C/C++,java等其他語言的break語句一樣。
ITERATE語句允許您跳過剩下的整個代碼并開始新的迭代。ITERATE語句類似于PHP,C/C++,Java等中的continue語句。
關于如何在mysql存儲過程中使用WHILE,REPEAT和LOOP循環語句就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。