2012-11-01 39 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