Mysql CASE НЕ НАЙДЕН ДЛЯ ЗАЯВЛЕНИЯ CASE о Хранимой Процедуре - PullRequest
9 голосов
/ 24 октября 2011

я пытаюсь создать хранимую процедуру, которая имеет кратные CASE STATEMENTS У меня есть следующая хранимая процедура:

BEGIN
CASE @olds
WHEN 'emp' THEN
    CASE @news
    WHEN 'loc' THEN
        UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqloc;
        UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'vis' THEN
        UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE id=@eqvis;
        UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
WHEN 'loc' THEN
    CASE @news
    WHEN 'emp' THEN
        UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqloc;
        UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'vis' THEN
        UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqvis;
        UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
WHEN 'vis' THEN
    CASE @news
    WHEN 'emp' THEN
        UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqvis;
        UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE id=@eqloc;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    WHEN 'loc' THEN
        UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqloc;
        UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE id=@eqvis;
        UPDATE partidos SET `eqgan`=@news WHERE id=@mst;
        UPDATE log_partidos SET `status`=@news WHERE `match`=@mst;
    END CASE;
END CASE;
END

Каждый раз, когда я выполняю эту процедуру, я получаю следующую ошибку: «Не найден регистр для оператора CASE» Что я делаю не так?

Ответы [ 2 ]

24 голосов
/ 22 августа 2013

Это специфическая проблема MySQL.
В MySQL регистр всегда должен иметь правильное совпадение, поэтому предложение ELSE.
И поскольку оператор после совпадения не может быть пустым, вы можете заполнить его пустым блоком, например:

ELSE BEGIN END;

Таким образом, допустимым регистром будет, например:

CASE @news  
  WHEN 'emp' THEN  
    UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE id=@eqvis;  
  WHEN 'loc' THEN  
    UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE id=@eqloc;  
  ELSE BEGIN END;  
END CASE;
2 голосов
/ 25 октября 2011

Эта ошибка означает, что одно из операторов 'case' не может найти совпадение.Вы уверены, что переменные olds и news содержат правильные значения?Попробуйте изменить последнее «когда» в каждом случае на «еще» и посмотрите, сработает ли тогда ваша процедура.

...