2013-07-20 2 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; 

INTO должен прийти сразу после SELECT и перед FROM

+0

аааа! Я смотрел на него в течение 2 часов и не видел этого! благодаря :) – godzilla

Смежные вопросы