2013-07-20 57 views
1

我已經實現如下的存儲過程,但我得到當我嘗試將其應用於以下錯誤信息:存儲過程的錯誤消息

ERROR 1064(42000):你在你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'WHERE symbol_id = id GROUP BY symbol_id;

我做了一些調試,發現它是由@max變量引起的,我試圖將結果寫入,但是我沒有看到任何語法錯誤,任何人都可以請指教?

DROP PROCEDURE IF EXISTS `GENERATE_REPORT`; 
DELIMITER $$ 
CREATE DEFINER=CURRENT_USER PROCEDURE `GENERATE_REPORT`() 
BEGIN 
    DECLARE id INT; 
    DECLARE max INT; 
    DECLARE at_end BIT DEFAULT 0; 
    DECLARE cur CURSOR 
     FOR SELECT symbol_id from trade; 
     DECLARE CONTINUE HANDLER 
     FOR SQLSTATE '02000' SET at_end=1; 

    OPEN cur; 
    FETCH cur INTO id; 
    WHILE (NOT at_end) DO 
     SELECT SUM(quantity) FROM trade INTO **@max** WHERE symbol_id = id GROUP BY symbol_id; 
     FETCH cur into id; 
    END WHILE; 
    CLOSE cur; 
END 

$$ DELIMITER;

回答

1

您有不正確的語法在SELECT ... INTO

變化

SELECT SUM(quantity) 
FROM trade 
INTO @max -- Incorrect placement 
WHERE symbol_id = id 
GROUP BY symbol_id; 

SELECT SUM(quantity) 
INTO @max -- Correct placement 
FROM trade 
WHERE symbol_id = id 
GROUP BY symbol_id; 

INTOSELECT後應該馬上和前FROM

+0

啊啊啊!我一直在看它2個小時,看不到!謝謝 :) – godzilla