mysql语法错误,但在哪里?

时间:2012-11-01 08:33:05

标签: mysql function syntax

我正在关注有关mysql函数创建的一些教程,但我不断收到以下错误。

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近''第5行:

 CREATE FUNCTION getstatisticscount (h VARCHAR(35),d date)
  RETURNS INT
  DETERMINISTIC
   BEGIN
    DECLARE tel INT;
    SELECT count(hash) into tel from statsitieken where hash=h and lastvisit between concat(d,' 00:00:00') and concat(d,' 23:59:59') group by hash;  
    RETURN tel;
   END;

我可以为我的生活找不到第5行的位置,但无论我把它放在哪一行,我都会遇到这个错误。 如果我从sql小提琴代码中删除此功能,那就没关系了。 我找不到它有什么问题...除了可能有缺陷的教程。

http://sqlfiddle.com/#!2/70f0a

1 个答案:

答案 0 :(得分:2)

使用分隔符

delimiter //
CREATE FUNCTION getstatistics(h VARCHAR(35),d date)
  RETURNS INT
  DETERMINISTIC
   BEGIN
    DECLARE tel INT;
    SELECT count(hash) INTO tel
    FROM statistics
    WHERE
      hash=h
      AND lastvisit BETWEEN concat(d,' 00:00:00') AND concat(d,' 23:59:59')
    GROUP BY hash;  
    RETURN tel;
   END
//

DELIMITER ;

了解更多信息:http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html

编辑:基本上,因为你的存储过程用分号(;)分隔语句,并且定义你的过程的方法也使用分号来分隔语句,所以MySQL很难找出你的程序开始和结束的位置。 我还编辑了上面的SQL语句,将分隔符返回到默认分号。