当试图在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
我收到以下(有用)错误:
错误1064(42000):SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第3行""附近使用的正确语法
我只是不知道从哪里开始调试,因为这些行中的每一行都是正确的。
你有什么建议吗?
4条答案
按热度按时间uidvcgyl1#
由于第3行包含第一个
;
,可能您的分隔符有问题。参见http://dev.mysql.com/doc/refman/en/stored-programs-defining.html
6bc51xsx2#
谢谢,第3行*a附近的a是我的问题,分隔符语句修复了它!我总是希望事情有意义,这确实做到了。因为''指示它在过程的结尾,但没有找到END语句,因此语法错误。我想知道为什么我一直看到很多人使用分隔符语句。我看到了光明!
gajydyqb3#
永远不要声明@child_left变量。
o7jaxewo4#
如果你有一堆程序不能同时运行,但可以单独成功运行的问题,尝试用
Go
命令将它们分开。例如: