MySQL 中的循环标签
Label for Loop in MySQL
MySQL 的官方文档说 LOOP
语句使用标签是可选的。但是当我在没有标签的存储过程中使用LOOP
语句时,出现了错误。 SQL脚本文件如下:
DELIMITER $$
DROP PROCEDURE IF EXISTS loop_demo $$
CREATE PROCEDURE loop_demo()
BEGIN
DECLARE i INT;
DECLARE sum INT;
SET i = 0;
SET sum = 0;
LOOP
IF i > 10 THEN LEAVE ;
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE ;
ELSE
SET sum = sum + i;
END IF;
END LOOP;
SELECT sum;
END $$
DELIMITER ;
CALL loop_demo();
这是一个简单的循环,它找到小于或等于 10 的偶数 no.s 的总和。但是当我 运行 程序生成以下错误消息时:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE ;
ELSE
' at line 8
哪里出了问题?
您基本上缺少循环标签。它应该在循环开始时声明,并在 ITERATE
、LEAVE
和 END LOOP
语句中引用。我还建议不要将变量命名为 sum
,因为它与 SQL 关键字冲突。
考虑:
DELIMITER $$
CREATE PROCEDURE loop_demo()
BEGIN
DECLARE i INT;
DECLARE sm INT;
SET i = 0;
SET sm = 0;
lbl: LOOP
IF i > 10 THEN LEAVE lbl;
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE lbl;
ELSE
SET sm = sm + i;
END IF;
END LOOP lbl;
SELECT sm;
END $$
DELIMITER ;
MySQL 的官方文档说 LOOP
语句使用标签是可选的。但是当我在没有标签的存储过程中使用LOOP
语句时,出现了错误。 SQL脚本文件如下:
DELIMITER $$
DROP PROCEDURE IF EXISTS loop_demo $$
CREATE PROCEDURE loop_demo()
BEGIN
DECLARE i INT;
DECLARE sum INT;
SET i = 0;
SET sum = 0;
LOOP
IF i > 10 THEN LEAVE ;
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE ;
ELSE
SET sum = sum + i;
END IF;
END LOOP;
SELECT sum;
END $$
DELIMITER ;
CALL loop_demo();
这是一个简单的循环,它找到小于或等于 10 的偶数 no.s 的总和。但是当我 运行 程序生成以下错误消息时:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE ;
ELSE
' at line 8
哪里出了问题?
您基本上缺少循环标签。它应该在循环开始时声明,并在 ITERATE
、LEAVE
和 END LOOP
语句中引用。我还建议不要将变量命名为 sum
,因为它与 SQL 关键字冲突。
考虑:
DELIMITER $$
CREATE PROCEDURE loop_demo()
BEGIN
DECLARE i INT;
DECLARE sm INT;
SET i = 0;
SET sm = 0;
lbl: LOOP
IF i > 10 THEN LEAVE lbl;
END IF;
SET i = i + 1;
IF (i MOD 2) THEN ITERATE lbl;
ELSE
SET sm = sm + i;
END IF;
END LOOP lbl;
SELECT sm;
END $$
DELIMITER ;