Как разделить на другой столбец с помощью триггера MySQL? - PullRequest
2 голосов
/ 16 ноября 2011

Я довольно новичок в MySQL, и я немного озадачен этой проблемой. Это то, что у меня есть, но это не работает.

create trigger CalculateAvgACD after insert on agent
    for each row begin
        update agent set AvgACDTime=new.AnsweredCalls/new.TotalACDTime
        where TotalACDTime != -1;
    end;

Мой друг сказал мне, что у MySQL есть некоторые причуды в его синтаксисе, о которых я должен спросить. Любая помощь будет принята с благодарностью. Спасибо всем

1 Ответ

0 голосов
/ 17 ноября 2011

Нельзя использовать оператор update, insert или delete в триггере на одной и той же таблице.

Вместо этого вам нужно манипулировать виртуальной таблицей NEW.

DELIMITER $$

CREATE TRIGGER CalculateAvgACD AFTER INSERT ON agent FOR EACH ROW
BEGIN
  IF (NEW.TotalACDTime != -1) AND (NEW.TotalACDTime <> 0) THEN
    SET NEW.AvgACDTime = NEW.AnsweredCalls/NEW.TotalACDTime;
  END IF;
END $$

DELIMITER ;

Этот код делает то же самое, что и ваш код, но потому что он работает только со значениями NEW в текущей строкеон будет работать без жалоб MySQL на то, что триггер самореферентный.Обратите внимание, что я также исправил потенциальную ошибку divide by zero.

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