2

我正在关注一些关于 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 fiddle 代码中删除这个函数,一切都很好。我找不到它有什么问题......除了可能有缺陷的教程。

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

4

1 回答 1

3

使用分隔符

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 语句,将分隔符恢复为默认分号。

于 2012-11-01T08:35:40.767 回答