2012-11-01 41 views
2

我正在关注一些关于mysql函数创建的教程,但我不断收到以下错误。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

+3

SQL小提琴在哪里? –

+3

不错!我以前不知道 - http://sqlfiddle.com/ –

+0

我已经添加了sql小提琴链接 – Tschallacka

回答

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语句以将分隔符返回到默认分号。

+0

我希望它能工作,但它返回'你有一个SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以获得在'delimeter'附近使用的正确语法// CREATE FUNCTION getstatisticscount(h VARCHAR(35),d date) RETURNS'在第1行:' – Tschallacka

+3

它在HeidiSQL和MySQL命令行。在SQL小提琴中,尝试更改查询分隔符(DDL框下方的第四个按钮)。 –

+0

你可以尝试在你的应用程序中的建议,而不是SQL小提琴:http://stackoverflow.com/questions/12166380/execute-stored-procedure-on-sqlfiddle – ajacian81