2010-08-04 152 views
5

我正在使用MySQL v5.1.36,並試圖使用此代碼創建存儲函數。MySQL存儲函數創建錯誤ERROR 1064&1327

DELIMITER // 
CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC 
    BEGIN 
    DECLARE y INT; 
    SELECT id INTO y 
    FROM `modx`.coverage_state 
    WHERE `coverage_state`.name = x; 
    RETURN y; 
    END// 

當進入MySQL控制檯時,我得到了這個響應。

mysql> DELIMITER // 
mysql> CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC 
    ->   BEGIN 
    ->   DECLARE y INT; 
ERROR 1064 (42000): 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 '' at 
line 3 
mysql>   SELECT id INTO y 
    ->   FROM `modx`.coverage_state 
    ->   WHERE `coverage_state`.name = x; 
ERROR 1327 (42000): Undeclared variable: y 
mysql>   RETURN y; 
ERROR 1064 (42000): 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 'RETUR 
N y' at line 1 
mysql>   END// 

從我能在網上找到我的語法是正確的。我究竟做錯了什麼?

回答

6

我通過在我的變量周圍加上``來解決我的問題。這是我結束的代碼。

DELIMITER // 
CREATE FUNCTION `modx`.getSTID (x VARCHAR(255)) RETURNS INT DETERMINISTIC 
    BEGIN 
    DECLARE `y` INT; 
    SELECT id INTO `y` 
    FROM `modx`.coverage_state 
    WHERE `coverage_state`.name = `x`; 
    RETURN `y`; 
    END// 
DELIMITER ; 
6

從mysql控制檯創建函數/過程時,第一個命令應該是DELIMITER //。否則,它使用默認分隔符(;),

+0

啊,我錯過了,當我從控制檯抓取信息。我會在問題中解決這個問題。 – 2010-08-04 15:33:54