Задать вопрос
coderisimo
@coderisimo

Почему при создании триггера выдаётся ошибка синтаксиса?

Создаю триггер через интерфейс PHP My ADMIN . Экспортирую из него, вставляю обратно в него же и ... синтаксическая ошибка!

вот это проходит на ура
CREATE TRIGGER `after_deal_creating` BEFORE INSERT ON `deals`
 FOR EACH ROW INSERT INTO  `notifications` 
SET  `new_quote_status` = NEW.`quote_status` ,
`deal_id` = NEW.`id` ,
`broker_id` = NEW.`broker_id` ,
`creator_id` = NEW.`creator_id` ,
`box_user_id` = NEW.`box_user_id`


а вот здесь ошибка в строке `box_user_id`= NEW.`box_user_id`;

CREATE TRIGGER `after_deal_updating` BEFORE UPDATE ON  `deals` FOR EACH ROW IF NEW.`quote_status` <> OLD.`quote_status` THEN INSERT INTO  `notifications` 
SET  `new_quote_status` = NEW.`quote_status` ,
`deal_id` = OLD.`id` ,
`broker_id` = NEW.`broker_id` ,
`creator_id`= OLD.`creator_id`,
`box_user_id`= NEW.`box_user_id`; // вот здесь ошибка!!
END IF;


Версия сервера: 5.5.45-
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
vakorovin
@vakorovin
Разработчик
Гуглите mysql delimiter
Ответ написан
coderisimo
@coderisimo Автор вопроса
Резюме (ибо внятных объяснений на момент написания сего текста еще не нашел). Нужно объявить delimiter , который будет использоваться в конце процедуры :
delimiter |
CREATE TRIGGER `after_deal_updating` BEFORE UPDATE ON `deals` FOR EACH ROW IF NEW.`quote_status` <> OLD.`quote_status` THEN INSERT INTO `notifications`
SET `new_quote_status` = NEW.`quote_status` ,
`deal_id` = OLD.`id` ,
`broker_id` = NEW.`broker_id` ,
`creator_id`= OLD.`creator_id`,
`box_user_id`= NEW.`box_user_id`; // вот здесь была ошибка!!
END IF|

в самой процедуре используем СТАНДАРТНЫЙ. (Я пытался сначала использовать его везде и получал еще одну ошибку)
В случае , если функциональное определение не содержит никакой внутренней ';' можно обойтись без delimiter
Пример :

CREATE TRIGGER `after_deal_creating` BEFORE INSERT ON `deals`
FOR EACH ROW INSERT INTO `notifications`
SET `new_quote_status` = NEW.`quote_status` ,
`deal_id` = NEW.`id` ,
`broker_id` = NEW.`broker_id` ,
`creator_id` = NEW.`creator_id` ,
`box_user_id` = NEW.`box_user_id`
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы