2012-04-15 6 views
1

Я новичок в процедурах MySQL. Я просто пытаюсь запустить курсор над набором данных, и для каждой строки выполняется другая процедура (я знаю, что работает). Я получаю код ошибки 1064 на линии трех из ниже:Ошибка MySQL 1064 при определении хранимой процедуры

CREATE PROCEDURE `safecycle`.`sp_aggregateAllPORDaily`() 
BEGIN 
    DECLARE done INT DEFAULT FALSE; 
    DECLARE porID SMALLINT UNSIGNED; 
    DECLARE cur1 CURSOR FOR SELECT ID FROM point_of_recycle; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

    OPEN cur1; 

    read_loop: LOOP 
    FETCH cur1 INTO porID; 
    IF done THEN 
     LEAVE read_loop; 
    END IF; 
    CALL sp_aggregatePORDaily(porID); 
    END LOOP; 

    CLOSE cur1; 
END 

Я стучал головой о стену на некоторое время и будет очень признателен за помощь.

ответ

5

Вы не изменили свой разделитель, так что первый встреченный ; завершает все заявление.

DELIMITER $$ 

CREATE PROCEDURE 
    blah blah blah 
END$$ 

DELIMITER ; 

Изменяя Разделитель таким образом, вы можете смело определить свою процедуру с несколькими операторов, встраиванием нормального ; внутри него, а затем завершите создание заявления с «новым» разделителем. Впоследствии вы восстанавливаете стандартный разделитель и продолжаете, как обычно.

+0

Да, да, спасибо. – Nik

+0

Очень странно, что sqlyog генерирует Delimiter с ';' в начале, который, по-видимому, завершал весь оператор, когда он запускался из командной строки. – shashi009