За последние 24 часа нас посетили 16657 программистов и 1651 робот. Сейчас ищут 1400 программистов ...

Хранимая процедура. Ошибка с DECLARE

Тема в разделе "MySQL", создана пользователем cyber-sky, 11 июл 2011.

  1. cyber-sky

    cyber-sky Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    10
    Симпатии:
    0
    Написал вот такую процедуру:

    Код (Text):
    1.  
    2. CREATE PROCEDURE check_branch(INOUT CheckId INT)
    3. BEGIN
    4.     DECLARE save_id INT DEFAULT 0;
    5.  
    6.     SELECT id INTO save_id FROM tree WHERE parent = CheckId;
    7.     IF save_id = 0 THEN
    8.         SET @result = 0;
    9.     END IF;
    10. END
    Ошибка:
    Код (Text):
    1. #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 '' at line 3
    Делаю по примерам из статей. Подскажите, что не верно
     
  2. cyber-sky

    cyber-sky Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    10
    Симпатии:
    0
    Разобрался. Проблемы было две. Процедуру я создавал не через консоль, а через phpMyAdmin. При создании процедуры (в phpMyAdmin во вкладке SQL), в поле Delimiter (разделитель) нужно поставить знаки $$.

    Последнее недаразумение, в таблице у меня лежало несколько записей, а INTO должен возвращать не больше одной строки. А так как, этой процедурой мне нужно было узнать существование у ветки потомков, просто подставил COUNT.
    В итоге процедура получилась следующая:

    Код (Text):
    1.  
    2. CREATE PROCEDURE `check_branch` (CheckId INT)
    3. BEGIN
    4.     DECLARE save_id INTEGER DEFAULT 0;
    5.  
    6.     SELECT COUNT(`id`) INTO save_id FROM `tree` WHERE `parent` = CheckId;
    7.     IF save_id = 0 THEN
    8.         SET @result = 0;
    9.     ELSE
    10.         SET @result = save_id;
    11.     END IF;
    12. END
    Запускается так:
    Код (Text):
    1.  
    2. CALL check_branch(1);
    3. select @result