2013-07-09 59 views
-1

我試圖爲我的郵件服務器設置一個MySQL函數。 MySQL版本是5.1.66。MySQL函數中的語法錯誤

我知道這個查詢有什麼問題。我也嘗試過RETURN DOUBLE,READS SQL DATADETERMINISTIC但他們都沒有幫助。

我正在使用PhpMyAdmin。分隔符被設置爲$$。但我得到的是一個神祕的錯誤消息:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TEXT CHARSET utf8 READS SQL DATA BEGIN DECLARE mygoto VARCHAR(25' at line 3 

我的代碼:

CREATE PROCEDURE `get_email_alias`(
myemail VARCHAR(255) 
) RETURNS TEXT CHARSET utf8 
READS SQL DATA 

BEGIN 

DECLARE mygoto VARCHAR(255); 
DECLARE sdomain VARCHAR(255); 
DECLARE ddomain VARCHAR(255); 

SELECT SUBSTRING(myemail, INSTR(myemail, '@')+1) INTO sdomain; 

SELECT target_domain 
FROM alias_domain 
WHERE alias_domain = sdomain 
AND active = 1 
LIMIT 1 
INTO ddomain; 

IF ddomain IS NOT NULL THEN 
SELECT REPLACE(myemail, sdomain, ddomain) INTO myemail; 
END IF; 
SELECT goto 
FROM alias 
WHERE address = myemail 
AND active = 1 
LIMIT 1 
INTO mygoto; 

IF mygoto IS NOT NULL THEN 
RETURN mygoto; 
END IF; 

RETURN null; 
END $$ 
+3

程序拼寫錯誤。 – BLaZuRE

+0

更正。 Post中的新錯誤。 – waflija

+2

如果你看看[MySQL語法](http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html),那麼CREATE PROCEDURE'不會在'CREATE FUNCTION'時產生'RETURN'確實。 – BLaZuRE

回答

0

程序」在第一次行缺少‘E’

+0

添加了缺失的「E」和「READS SQL DATA」新錯誤: #1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在'TEXT CHARSET utf8 READS SQL DATA BEGIN DECLARE mygoto VARCHAR(25'在第3行 – waflija

+0

附近使用希望可以提供更多幫助,但不會在視覺上看到任何東西。 BLaZuRE關於procedure/return的評論也許你想要Function?另外,不知道關於mySql,但是在SQL Server中,你不需要在結果集的過程中做RETURN,只需執行一個查詢並且調用者獲得結果。祝你好運! – asantaballa