Mysql
怎麼做while循環?
我們如何在 MySQL 中使用 while 循環?我的測試腳本:
BEGIN SELECT 0 INTO @n; WHILE @n < 10 DO SELECT @n; SET @n := @n +1; END WHILE; END;
但它有語法錯誤。我在標準查詢視窗中使用 SQLyog 客戶端執行循環。語法錯誤具有以下形式:
錯誤程式碼:1064
您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以獲取在附近使用的正確語法…
我也嘗試使用https://dev.mysql.com/doc/refman/5.6/en/while.html提供的 while 循環範例,但它仍然不起作用。
腳本的哪一部分是錯誤的?(使用 MySQL 5.6。)
我正在嘗試對某些數據進行 6 個月移動平均值,因此我希望 while 循環能夠通過循環的每次迭代將“新”6 個月平均值附加到“舊”6 個月平均值上。
如果沒有儲存過程,就不能在 SQL 編輯器中執行 for 循環。我
MySQL Workbench
用來做這個。一個快速的儲存過程應該可以完成這項工作:
DROP PROCEDURE IF EXISTS proc_loop_test; CREATE PROCEDURE proc_loop_test() BEGIN DECLARE int_val INT DEFAULT 0; test_loop : LOOP IF (int_val = 10) THEN LEAVE test_loop; END IF; SET int_val = int_val +1; SELECT int_val; END LOOP; END;
只是為了澄清“while”循環確實有效:
正確地說,您需要創建一個儲存過程(例如,不能像在 Oracle 中那樣執行匿名塊),而且它有時在“通用”SQL 編輯器中不能很好地工作(因為 PL/SQL 並不總是工作也好)
您可以使用 MySQL Workbench,也可以使用命令行:
16:54 [test]:> delimiter $$ 16:54 [test]:> create procedure testwhile () -> begin -> declare n int; -> set n:=0; -> while n <10 do -> select n; -> set n := n+1; -> end while; -> end; -> $$ Query OK, 0 rows affected (0.00 sec) 16:54 [test]:> delimiter ; 16:54 [test]:> call testwhile(); [...]
作為旁注,
@variables
也可以工作,但它們是會話變數。在這種情況下,我更喜歡本地儲存過程變數(在過程範圍之外無法看到或修改)