Inq*_*rer 7 mysql stored-procedures mysql-5.6
我们如何在 MySQL 中使用 while 循环?我的测试脚本:
BEGIN
SELECT 0 INTO @n;
WHILE @n < 10 DO
SELECT @n;
SET @n := @n +1;
END WHILE;
END;
Run Code Online (Sandbox Code Playgroud)
但它有语法错误。我在标准查询窗口中使用 SQLyog 客户端运行循环。语法错误的形式如下:
错误代码:1064
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法...
我还尝试使用https://dev.mysql.com/doc/refman/5.6/en/while.html提供的 while 循环示例,但它仍然不起作用。
脚本的哪个部分是错误的?(使用 MySQL 5.6。)
我正在尝试对某些数据进行 6 个月的移动平均值,因此我希望 while 循环能够通过循环的每次迭代将“新”6 个月平均值附加到“旧”6 个月平均值上。
oNa*_*are 11
如果没有存储过程,就不能在 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;
Run Code Online (Sandbox Code Playgroud)
只是为了澄清“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();
[...]
Run Code Online (Sandbox Code Playgroud)
作为旁注,也可以@variables
工作,但它们是会话变量。在这种情况下,我更喜欢本地存储过程变量(在过程范围之外无法看到或修改)
归档时间: |
|
查看次数: |
59274 次 |
最近记录: |