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!!!