【问题标题】:SQL syntax error when creating a stored procedure in MySQL在 MySQL 中创建存储过程时出现 SQL 语法错误
【发布时间】:2010-10-12 22:49:22
【问题描述】:

尝试在 mysql 中创建存储过程时,我很难找到错误。

如果我独立运行程序的每一行,一切都会正常运行。

CREATE PROCEDURE cms_proc_add_child 
(
    param_parent_id INT, param_name CHAR(255),
    param_content_type CHAR(255)
)
BEGIN
    SELECT @child_left := rgt FROM cms_tree WHERE id = param_parent_id;
    UPDATE cms_tree SET rgt = rgt+2 WHERE rgt >= @child_left;
    UPDATE cms_tree SET lft = lft+2 WHERE lft >= @child_left;
    INSERT INTO cms_tree (name, lft, rgt, content_type) VALUES 
    (
        param_name,
        @child_left,
        @child_left+1,
        param_content_type
    );
END

我收到以下(有用的)错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 '' 附近使用正确的语法

我只是不知道从哪里开始调试,因为这些行中的每一行都是正确的。

你有什么建议吗?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    由于第 3 行包含第一个 ;,您的分隔符可能有问题。

    见http://dev.mysql.com/doc/refman/5.0/en/stored-programs-defining.html

    DELIMITER //
    CREATE PROCEDURE dorepeat(p1 INT)
    BEGIN
        SET @x = 0;
        REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
    END//
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      你永远不会声明你的 @child_left 变量。

      【讨论】:

        【解决方案3】:

        谢谢,near '' at line 3 是我的问题,分隔符语句解决了它!我总是希望事情有意义,而这确实如此。因为 '' 表示它在过程的末尾,但没有找到 END 语句,因此出现语法错误。我想知道为什么我一直看到很多人使用分隔符语句。我看到了光!

        【讨论】:

          【解决方案4】:

          如果您遇到无法同时运行但可以单独成功运行的一堆过程的问题,请尝试使用Go 命令将它们分开。

          例如:

          --i)
          CREATE PROCEDURE A
          AS
          BEGIN
          END;
          GO 
          
          --ii)
          CREATE PROCEDURE B
          AS
          BEGIN
          END;
          

          【讨论】:

            猜你喜欢
            • 2018-04-06
            • 2020-07-06
            • 1970-01-01
            • 2013-05-12
            • 2018-11-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多