Создание триггера для таблицы в базе данных MySQL (синтаксическая ошибка) - PullRequest
17 голосов
/ 22 января 2009

У меня проблемы с определением триггера для базы данных MySQL. Я хочу изменить текстовое поле перед вставкой новой строки (при заданном условии). Вот что я попробовал:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END; 

Но всегда я получаю ошибку "неправильный синтаксис". Я застрял, что я делаю не так? Я использую MySQL 5.0.51a-сообщество

Кстати: создание пустого триггера, как это работает отлично:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
END; 

Но это тоже не получается:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN
  IF 1=1 THEN
  END IF; 
END;

Я впервые использую stackoverflow.com, поэтому я очень рад, если будет полезно что-то опубликовать здесь: -)

1 Ответ

28 голосов
/ 22 января 2009

Вам нужно изменить разделитель - MySQL видит первый ";" как конец оператора CREATE TRIGGER.

Попробуйте это:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */
DELIMITER $$

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END$$
/* This is now "END$$" not "END;" */

/* Reset the delimiter back to ";" */
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...