Mysql

怎麼做while循環?

  • November 20, 2019

我們如何在 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也可以工作,但它們是會話變數。在這種情況下,我更喜歡本地儲存過程變數(在過程範圍之外無法看到或修改)

引用自:https://dba.stackexchange.com/questions/62812