[ENCERRADO] Mais de um Trigger na mesta tabela do MSYQL

Olá colegas!

Montei uma stored procedure para salvar dados do usuário quando ele incluir, alterar, ou excluir um dado.

A função está funcionando perfeitamente, tudo ok!

Porém, não consigo adicionar mais de uma trigger na mesma tabela, ou seja, O Mysql não permite inserir uma trigger pra insert, outra par delete e outra pra update na mesma tabela.

Aparace uma mensagem informando que ele não suporta:

“This version of MySQL doesn’t yet support ‘multiple triggers with the same action time and event for one table’”

"Esta versão do MySQL ainda não suporta “vários gatilhos com o mesmo tempo de ação e evento para uma tabela”

Alguém sabe uma maneira de fazer isso?

Obrigado!

olá.

Crie a trigger baseando-se no disparo de todos os eventos que precisar (delete, insert, update). No código dela você pode verificar qual evento foi disparado. Algo do tipo:

if INSERTING then... else if updating then ...

Não consultei a documentação do MYSql pra te dar a sintaxe exata, mas a idéia é por aí

Como você está criando as triggers? Está especificando o evento correto, como sugerido pelo ADEMILTON ? Você pode criar triggers para eventos diferentes, mas não para o mesmo evento, que é o que a mensagem de erro está sugerindo.

Exemplificando:

[i]set delimiter $$

create trigger umatrigger before update on mytable
for each row
begin

end$$

delimiter ;

delimiter $$

create trigger outratrigger after update on mytable
for each row
begin

end$$

delimiter ;[/i]

Abraço.

Eu fiz de dois modos:

No próprio Workbench na aba triggers da tabela eu vou lá e adiciono uma trigger para after update por exemplo, ok, funciona normal.

quando adiciono uma para insert , a que eu adicionei antes para update é apagada sozinha.

Ja na unha fiz assim:

DELIMITER $$

USE `system_press`$$

CREATE TRIGGER `parada_peca_AUPD` AFTER UPDATE ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$

CREATE TRIGGER `parada_peca_AINS` AFTER INSERT ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$


CREATE TRIGGER `parada_peca_ADEL` AFTER DELETE ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (OLD.id_producao);
END$$

Mudei conforme o TerraSkilll me passou:

set delimiter $$ 
CREATE TRIGGER `parada_peca_AUPD` AFTER UPDATE ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$
delimiter; 


set delimiter $$ 
CREATE TRIGGER `parada_peca_AINS` AFTER INSERT ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$
delimiter; 


set delimiter $$ 
CREATE TRIGGER `parada_peca_ADEL` AFTER DELETE ON parada_peca FOR EACH ROW
BEGIN
CALL sp_perdas_peca (OLD.id_producao);
END$$
delimiter;

Fiz testes tirando o “set” do delimiter mas mesmo assin não funcionou, continua o erro:

Error Code: 1235. This version of MySQL doesn’t yet support 'multiple triggers with the same action time and event for one table’

Estou utilizando MYSQL 5.6

O que será?

Era erro de sintaxe, segue o modo que funcionou:

DELIMITER $$
 
CREATE TRIGGER Tgr_parada_peca_Insert AFTER INSERT
ON parada_peca
FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$
 
CREATE TRIGGER Tgr_parada_peca_Update AFTER UPDATE
ON parada_peca
FOR EACH ROW
BEGIN
CALL sp_perdas_peca (NEW.id_producao);
END$$

CREATE TRIGGER Tgr_parada_peca_Delete AFTER DELETE
ON parada_peca
FOR EACH ROW
BEGIN
CALL sp_perdas_peca (OLD.id_producao);
END$$
 
DELIMITER ;

Só não entendi porque o Workbench insiste em remover uma trigger quando coloco outra.

Mas funcionou.

Valeu pela ajuda!!!