我有大约2年的mySQL在我的腰带,但我第一次潜入存储过程为我的网站创建一个内部分析工具。我通常善于跟踪SQL错误,但这个问题正在困扰着我。MySQL存储过程创建错误
我得到的错误是这样的:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
这是我执行收到此错误代码:
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 ;
给了我这个错误: 致命错误:在c突破300秒最大执行时间: \ wamp \ apps \ phpmyadmin3.2.0.1 \ libraries \ import \ sql.php on line 119
编辑原始帖子,因为当我在这里发布代码时,代码变得混乱起来,但是在SQL陈述中添加分隔符使其冻结。 – Matt 2011-06-15 03:36:21
你如何提交给MySQL?也许那个管道正在妨碍 - 命令行解析为一个实际的管道?尝试直接在mysql命令行客户端中粘贴文件的内容。 – Bohemian 2011-06-15 03:42:54
我使用PHP myadmin,我会尝试不同的分界符,但我不认为这会是一个问题。改变了Delim,仍然是我最后一次编辑的问题。嗯 – Matt 2011-06-15 04:10:44