【问题标题】:MySQL Stored Procedure CREATE ErrorMySQL 存储过程创建错误
【发布时间】:2011-06-15 02:22:29
【问题描述】:

我拥有大约 2 年的 mySQL 经验,但我第一次深入研究存储过程,以便为我的网站创建一个内部分析工具。我通常擅长追踪 SQL 错误,但这个错误让我望而却步。

我得到的错误是这样的:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 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 ;

给了我这个错误: 致命错误:在第 119 行的 C:\wamp\apps\phpmyadmin3.2.0.1\libraries\import\sql.php 中超过了 300 秒的最大执行时间

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    你可以的

    IF ROW_COUNT() = 0 THEN
    

    而不是IF SELECT ROW_COUNT() = 0 THEN。不需要SELECT

    【讨论】:

      【解决方案2】:

      我怀疑您的分隔符设置不正确。

      我通常在我的 SQL 源代码中包含分隔符设置/取消设置语句,这样“它就可以运行” - 每个 SQL 文件都可以独立运行是一种很好的做法,例如:

      delimiter ~
      
      create procedure ...
      
      end;~
      
      delimiter ;
      

      尝试将定界符更改为比管道字符更致命的东西 - 试试我的 tilda ~ 字符,它永远不会给我带来任何麻烦。我也看到$$ 也经常被使用。

      【讨论】:

      • 编辑了原始帖子,因为当我在这里发布代码时代码变得一团糟,但是在 SQL 语句中添加分隔符使其冻结。
      • 你是如何将这个提交给mysql的?也许该管道妨碍了 - 命令行是否解析为实际管道?尝试将文件的内容直接粘贴到 mysql 命令行客户端中。
      • 我正在使用 php myadmin,我会尝试不同的 delim,但我认为这不是问题。更改了 Delim,与我上次编辑的问题仍然相同。嗯
      猜你喜欢
      • 2014-05-07
      • 2014-12-17
      • 1970-01-01
      • 2014-03-07
      • 2018-09-01
      • 2015-05-09
      • 2016-11-11
      • 2017-10-14
      • 2021-07-10
      相关资源
      最近更新 更多