Mysql три триггера для одного триггера

Моя таблица Mysql не поддерживает создание нескольких триггеров. но у меня есть 3 триггера для трех запросов на обновление, как я могу запустить эти триггеры, используя один триггер,

ОШИБКА: # 1235 - Эта версия MySQL еще не поддерживает «несколько триггеров с одинаковым временем действия и событием для одной таблицы».

Благодарность

 CREATE TRIGGER `update_yeild2` BEFORE UPDATE ON `today_plan`
 FOR EACH ROW SET NEW.yeild = COALESCE((SELECT kiln_master.yeild 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0)


CREATE TRIGGER `update_yeild1` BEFORE UPDATE ON `today_plan`
 FOR EACH ROW SET NEW.temp = COALESCE((SELECT kiln_master.temp 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0)

CREATE TRIGGER `update_yeild0` BEFORE UPDATE ON `today_plan`
 FOR EACH ROW SET NEW.kiln = COALESCE((SELECT kiln_master.kiln 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0)

ОБНОВЛЕННЫЙ КОД:

CREATE TRIGGER `update_yeild2` BEFORE UPDATE ON `today_plan`
 FOR EACH ROW 

BEGIN

SET NEW.yeild = COALESCE((SELECT kiln_master.yeild 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);


  SET NEW.temp = COALESCE((SELECT kiln_master.temp 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);

  SET NEW.kiln = COALESCE((SELECT kiln_master.kiln 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);

END

Благодарность

Рабочий код: спасибо RandomSeed

delimiter //

CREATE TRIGGER `update_yeild2` BEFORE UPDATE ON `today_plan`
 FOR EACH ROW 

BEGIN

SET NEW.yeild = COALESCE((SELECT kiln_master.yeild 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);


  SET NEW.temp = COALESCE((SELECT kiln_master.temp 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);

  SET NEW.kiln = COALESCE((SELECT kiln_master.kiln 
                   FROM kiln_master
                   WHERE NEW.itemno = kiln_master.item  
                   AND  NEW.pattern = kiln_master.pattern
                   LIMIT 1), 0);

END

//
delimiter ;

person 9pixle    schedule 03.09.2013    source источник


Ответы (1)


Просто включите операции трех триггеров в один триггер:

CREATE TRIGGER (...)
FOR EACH ROW
BEGIN
    SET NEW.yeild = (...) ;
    SET NEW.temp = (...) ;
    SET NEW.kiln = (...) ;
END ;
person RandomSeed    schedule 03.09.2013
comment
О, теперь я понял, вы, вероятно, искали BEGIN ... END штуковину. - person RandomSeed; 03.09.2013
comment
#1064 - У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 10 - person 9pixle; 03.09.2013
comment
@Prabath Это новая ошибка (синтаксическая ошибка). Пожалуйста, опубликуйте свой текущий код. - person RandomSeed; 03.09.2013
comment
благодаря. я добавил свой текущий код в основной пост .. пожалуйста, обратитесь. - person 9pixle; 03.09.2013
comment
Вы обернули определение триггера между правильными предложениями DELIMITER? При определении процедур с несколькими операторами (или триггеров в данном случае) вам нужно сообщить синтаксическому анализатору, чтобы он не интерпретировал ; как конец вашего определяющего оператора. Проверьте этот вопрос для получения дополнительной информации. Может ли это быть причиной? - person RandomSeed; 03.09.2013
comment
См. также этот пример. - person RandomSeed; 03.09.2013
comment
Спасибо RandomSeed. DELIMITER - недостающая часть.. теперь работает.. :) :) :) - person 9pixle; 03.09.2013