2017-09-01 196 views
-1

试图实现在mysql中一个简单的嵌套循环程序:MySQL的存储过程语法错误

BEGIN 
    DECLARE days_cnt INT; 

    SET days_cnt = 0; # Start today 
    WHILE days_cnt < 10 DO 

     WHILE 1 DO 

     END WHILE; 

     SET days_cnt = days_cnt + 1; 
    END WHILE; 

END 

这是给通用1064错误约附近的语法错误“END WHILE;”

任何想法?

回答

0

您可能需要重新定义分隔符(分号),因为它在存储的程序中。按照Defining Stored Programs

如果您使用mysql客户端程序定义包含分号存储的程序,一个问题出现了。默认情况下,mysql本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符以使mysql将整个存储的程序定义传递给服务器。

所以你CREATE PROCEDURE语句之前添加以下(它可以比一个分号之外的任何字符(S)):delimiter $$

然后是CREATE PROCEDURE结束后重置它:delimiter ;

否则,我不确定MySQL如何处理嵌套在外部WHILE循环中的空的WHILE循环语句(WHILE 1 DO END部分)。您可能需要删除该内容或处理该内部循环中所需的任何内容。

0

这个循环必须有一个声明在它的内部:

WHILE 1 DO 

END WHILE;