ВЫБЕРИТЕ CASE и CALL процедуры на MYSQL - PullRequest
4 голосов
/ 28 декабря 2011

я пытаюсь сделать следующее

SELECT CASE @st
  WHEN 'emp' THEN CALL empata(NEW.eqvis)
  WHEN 'loc' THEN CALL pierde(NEW.eqvis)
  WHEN 'vis' THEN CALL gana(NEW.eqvis)
END
INTO @dat;

Но я получил это:

[Err] 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 'CALL empata(NEW.eqvis)
                    WHEN 'loc' THEN CALL pierde(NEW.eqvis)
                    WHEN' at line 18

Но если я уберу "Call", я получу "Function db.xxx not found"

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вы можете преобразовать ваши процедуры empata, pierde и gana в функции и использовать их как закодировано в первом примере ниже:

-- works
SET @st = 'loc';
SELECT CASE @st
  WHEN 'loc' THEN function_(@st)
END
INTO @dat;
SELECT @dat;

Я протестировал следующие сценарии, и они не 't work:

-- won't work
SET @st = 'loc';
IF @st = 'loc' THEN
    function_(@st);
END IF;

-- won't work
SET @st = 'loc';
SELECT CASE @st
  WHEN 'loc' THEN CALL stored_procedure_(@st)
END
INTO @dat;
SELECT @dat;

-- won't work
SET @st = 'loc';
IF @st = 'loc' THEN
    CALL stored_procedure_(@st);
END IF;

По крайней мере, ни один из трех приведенных выше примеров не помог мне. Вы можете попробовать их и посмотреть, какой из них работает для вас.

Кроме того, ваш вопрос здесь такой же, как: MYSQL Вызов хранимых процедур внутри SELECT CASE по триггеру .., также опубликованному вами.Я не уверен, какой модератор закроет или сохранит, поэтому я тоже публикую этот ответ.Если в другой раз вы захотите ответить на заданный вами вопрос, который не получил приемлемого для вас ответа, просто увеличьте его, чтобы люди могли его увидеть снова.

0 голосов
/ 28 декабря 2011

Вы не можете использовать процедуру (используя CALL) в этой ситуации, это должна быть функция .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...