在MySQL查询中使用WHILE LOOP时出错

时间:2014-08-26 19:56:00

标签: mysql sql mariadb

我试图在MySQL中运行SQL查询(MariaDB 5.5.39)

CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 5;

  WHILE v1 > 0 DO
    SET v1 = v1 - 1;
  END WHILE;
END;

但是当我运行该查询时,我收到以下错误

MariaDB [elis27rel]> source /home/vagrant/test.sql;
--------------
CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 5
--------------

ERROR 1064 (42000) at line 1 in file: '/home/vagrant/test.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
'' at line 3
--------------
WHILE v1 > 0 DO
    SET v1 = v1 - 1
--------------

ERROR 1064 (42000) at line 5 in file: '/home/vagrant/test.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
'WHILE v1 > 0 DO
    SET v1 = v1 - 1' at line 1
--------------
END WHILE
--------------

ERROR 1064 (42000) at line 7 in file: '/home/vagrant/test.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
'END WHILE' at line 1
--------------
END
--------------

ERROR 1064 (42000) at line 8 in file: '/home/vagrant/test.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
'END' at line 1

我不知道代码的问题是什么。我从mysql网站http://dev.mysql.com/doc/refman/5.0/en/while.html复制并粘贴了该代码,并希望使用该脚本让我的脚湿透。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为这就是你所需要的:

DELIMITER $$

CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 5;

  WHILE v1 > 0 DO
    SET v1 = v1 - 1;
  END WHILE;
END;

DELIMITER ;

分隔符告诉MySQL不要在分号处结束语句 - 这将是一个问题,因为存储过程定义未在第一个分号处完成。