2016-06-06 5 views
0

Я пытаюсь создать эту процедуру:Проблемы создания MySQL хранимой процедуры

DELIMITER // 
CREATE PROCEDURE PA_INCLUDE_SETTING 
(IN SettingType INT(10), 
IN SettingName INT(10), 
IN Active INT(1), 
OUT result INT(1)) 
BEGIN 
    DECLARE exist INT; 
    SELECT COUNT(*) INTO exist 
    FROM tbSetting 
    WHERE nmSetting = SettingName 
    AND cdSettingType = SettingType; 
    IF (exist > 0) THEN 
     DECLARE active INT; 
     SELECT cdActive INTO active 
     FROM tbSetting 
     WHERE nmSetting = SettingName 
     AND cdTypeSetting = SettingType; 
     IF (active = 0) THEN 
      UPDATE tbSetting 
      SET cdActive = 1 
      WHERE nmSetting = SettingName 
      AND cdSettingType = SettingType; 
      SET result = -1; 
     ELSE 
      SET result = -2; 
     END IF; 
    ELSE 
     INSERT INTO tbSetting 
     (cdSettingType, nmSetting, cdActive) 
     VALUES (SettingType, Setting, Active); 
     SET result = 0; 
    END IF; 
END // 
DELIMITER ; 

Я использую эту таблицу:

CREATE TABLE tbSetting 
(
     cdSettingType INT(10) NOT NULL, 
     cdSetting INT(10) IDENTITY(1,1) NOT NULL, 
     nmSetting VARCHAR(30), 
     cdActive INT(1), 
     CONSTRAINT pk_cdSetting PRIMARY KEY (cdSettingType, cdSetting) 
) 

И я получаю сообщение об ошибке:

#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 'DECLARE active INT; 
      SELECT cdActive 
      FROM tbSetting 
      WHERE n' at line 13 

Это первый раз, когда я создаю хранимую процедуру с такой сложностью, и я не понимаю, почему эта ошибка появляется.

Заранее благодарю за помощь!

ответ

1

Декларации должны немедленно следовать за блоком begin. Так просто переместить декларацию до начала функции:

BEGIN 
    DECLARE exist INT; 
    DECLARE active INT; 

    . . . 

Кстати, exist очень плохое имя для переменной, потому что это очень similr к MySQL зарезервированное слово.

+0

Благодарим за помощь и совет, это решило мою проблему !! Через 7 минут я проверю ваш ответ как правильный! :) –

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