如何解决MySQL存储过程CREATE错误
| 我有大约2年的mySQL生涯,但是第一次进入存储过程以为我的站点创建一个内部分析工具。我通常擅长于查找SQL错误,但是这一点使我难以理解。 我得到的错误是这样的: 1064-您的SQL语法有误;在第3行的\'\'附近检查与您的MySQL服务器版本相对应的手册以使用正确的语法 这是我执行以接收此错误的代码:CREATE PROCEDURE STORE_ANALYTICS (IN chain VARCHAR(300))
BEGIN
UPDATE _analytics_clicks
SET chainCount = (chainCount + 1)
WHERE visitChain = chain;
IF SELECT ROW_COUNT() = 0 THEN
INSERT INTO _analytics_clicks (visitChain,chainCount)
VALUES (chain,1);
END IF;
END|
值得注意的是,在执行此操作之前,我已执行
DELIMITER |
我要更改的表的结构是这样的:
chainID int(11) auto_increment
visitChain varchar(300)
chainCount int(11)
当我自己执行第3行时,将visitChain = chain替换为visitChain = \'0 \'(0是我设置的测试链),命令运行良好,chainCount递增。
关于为什么我会收到此错误/未创建存储过程的任何想法?
谢谢,
马特
编辑:
SQL命令中包含的定界符:
DELIMITER |
CREATE PROCEDURE STORE_ANALYTICS (IN chain VARCHAR(300))
BEGIN
UPDATE _analytics_clicks SET chainCount = (chainCount+1) WHERE visitChain=chain;
IF ROW_COUNT() = 0 THEN
INSERT INTO _analytics_clicks (visitChain,chainCount) VALUES (chain,1);
END IF;
END|
DELIMITER ;
给我这个错误:
致命错误:第119行的C:\\ wamp \\ apps \\ phpmyadmin3.2.0.1 \\ libraries \\ import \\ sql.php中超过了300秒的最大执行时间
解决方法
你可以做
IF ROW_COUNT() = 0 THEN
而不是IF SELECT ROW_COUNT() = 0 THEN
。不需要SELECT
。
, 我怀疑您的分隔符设置不正确。
我通常在我的SQL源代码中包含定界符set / unset语句,这样,“它就可以运行”-最好的做法是每个SQL文件都可以独立运行,例如:
delimiter ~
create procedure ...
end;~
delimiter ;
尝试将定界符更改为比管道字符更致命的内容-试试我的tilda~
字符,它永远不会给我带来任何麻烦。我也经常看过9英镑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。