MySQL @variable - PullRequest
       29

MySQL @variable

1 голос
/ 19 января 2010

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

CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
// up to here all works fine
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot-1 WHERE slot > OLD.slot;
ENDIF;
END

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

Вот сообщение об ошибке от phpMyAdmin:

# 1363 - В триггере INSERT отсутствует старая строка

спасибо за любую помощь


новая попытка:

CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
SET @pivot := (SELECT slot FROM teams WHERE id = NEW.victim);
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot+1 WHERE slot < @pivot;
ENDIF;
END

ошибка:

# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашему серверу MySQL версия для правильного использования синтаксиса возле '; END 'в строке 9

1 Ответ

1 голос
/ 20 января 2010

В языке триггера нет ключевого слова ENDIF. Вместо этого используйте END IF (с пробелом в нем).

Вы можете просмотреть синтаксическую документацию для оператора IF .

...