У меня проблемы с определением триггера для базы данных MySQL. Я хочу изменить текстовое поле перед вставкой новой строки (при заданном условии). Вот что я пробовал:
CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
IF (NEW.sHeaders LIKE "%[email protected]%") THEN
SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]";
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, поэтому я очень рад, если что-то здесь будет полезно :-)
Я делаю этот комментарий, а не ответ, потому что это предположение: p
Спасибо! Я пробовал, но синтаксическая ошибка, похоже, вызвана оператором if. Даже следующее не удается: CREATE TRIGGER add_bcc BEFORE INSERT ON MailQueue FOR EACH ROW BEGIN IF 1 = 1 THEN END IF; КОНЕЦ; К сожалению, MySQL не дает никаких хороших подсказок, в чем ошибка ...






Вам нужно изменить разделитель - 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 "%[email protected]%") THEN
SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]";
END IF;
END$$
/* This is now "END$$" not "END;" */
/* Reset the delimiter back to ";" */
DELIMITER ;
Что произойдет, если вы удалите "SET"? Также вы должны изменить NEW.sHeaders + «BCC: [email protected]» на CONCAT (NEW.sHeaders, «BCC: [email protected]»)