mysql 循環的寫法


mysql8 官方文檔中明確說明不支持for 循環

MySQL does not support FOR loops.

mysql的循環寫法有以下3種

下面的三種存儲過程的循環寫法都能實現向test表中插入(p1,10)之間的數據。p1作為存儲過程的傳入參數存在。 

create table test (id int);

1. loop 語句

語法:

[begin_label:] LOOP

statement_list

END LOOP [end_label]

離開循環體,使用leave 或者return,使用return會直接退出存儲過程。

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
insert into test values(p1);
ITERATE label1;   --重復執行標簽為label1的循環體

END IF;

LEAVE label1;
END LOOP label1;
END;
//
delimiter ;

call doiterate(2);

mysql> select * from test;
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+------+

上面程序的等價寫法。

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
label1: LOOP

SET p1 = p1 + 1;

IF p1 >=10 THEN
LEAVE label1;
END IF;
insert into test values(p1);

ITERATE label1;  

END LOOP label1;

END;
//
delimiter ;

loop語句中需要iterate  與 leave 語句的配合使用。

2.while 語句

語法:

[begin_label:] WHILE search_condition DO

statement_list

END WHILE [end_label]

 

 delimiter //

CREATE PROCEDURE p_test(p1 INT)
BEGIN
set p1=p1+1;
while p1<10 do
insert into test values(p1);
SET p1 = p1 + 1;
end while;

END;
//
delimiter ;

3. repeat 語句

 語法:

[begin_label:] REPEAT

statement_list

UNTIL search_condition END REPEAT [end_label]

delimiter //
CREATE PROCEDURE p_test(p1 INT)
BEGIN
set p1=p1+1;
repeat
insert into test values(p1);
SET p1 = p1 + 1;
until p1>=10 end repeat;

END;
//
delimiter ;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM