Trigger mysql na própria tabela

Vandong

Power Member
Boas,
Estou com um erro num trigger que criei, já andei a pesquisar e não encontrei nada que me ajude a resolver. Então é o seguinte:
Tenho uma tabela Utilizadores com os seguintes campos -> IDUtilizadores, UserName, Pass, Nome, Email, etc....
O objectivo era, ao criar um utilizador colocar o valor do campo do Email no campo UserName, ou seja, o UserName = Email e quando é efectuado uma alteração nos dados do email do utilizador alterar o respectivo userName para ficar sempre UserName = Email

Fiz o seguinte para quando é inserido o utilizador (ao qual dá erro):

Código:
DELIMITER $$


DROP TRIGGER IF EXISTS InsertUserName_Utilizadores$$
CREATE TRIGGER InsertUserName_Utilizadores
AFTER INSERT ON Utilizadores
FOR EACH ROW BEGIN


UPDATE Utilizadores SET UserName = NEW.Email WHERE IDUtilizadores = NEW.IDUtilizadores;


END;
$$


e fiz o seguinte para quando é alterado dados do utilizador (ao qual também dá erro):

DELIMITER $$


DROP TRIGGER IF EXISTS UpdateUserName_Utilizadores$$
CREATE TRIGGER UpdateUserName_Utilizadores
AFTER UPDATE ON Utilizadores
FOR EACH ROW BEGIN


IF OLD.Email != NEW.Email THEN
UPDATE Utilizadores SET UserName = NEW.Email WHERE IDUtilizadores = OLD.IDUtilizadores;
END IF;


END;
$$
Não sei mesmo o que poderá estar errado...

Cumps,
 
Última edição:
Não te falta os ":" antes de OLD e de NEW?
Código:
DELIMITER $$

DROP TRIGGER IF EXISTS InsertUserName_Utilizadores$$
CREATE TRIGGER InsertUserName_Utilizadores
AFTER INSERT ON Utilizadores
FOR EACH ROW BEGIN
	UPDATE Utilizadores SET UserName = :NEW.Email WHERE IDUtilizadores = :NEW.IDUtilizadores;
END;

$$

Código:
DELIMITER $$

DROP TRIGGER IF EXISTS UpdateUserName_Utilizadores$$
CREATE TRIGGER UpdateUserName_Utilizadores
AFTER UPDATE ON Utilizadores
FOR EACH ROW BEGIN
	IF :OLD.Email != :NEW.Email THEN
		UPDATE Utilizadores SET UserName = :NEW.Email WHERE IDUtilizadores = :OLD.IDUtilizadores;
	END IF;
END;

 $$
 
Boas...não, não falta os ":".
Mas mesmo assim testei o teu código e dá logo erro logo na criação do trigger.
Atenção que o código que coloquei, quando disse que dava erro, era quando havia uma inserção do utilizador ou update de um utilizador e era "disparado" o trigger. Na criação do trigger não dá erro.
Eu não estou a ver onde poderá estar o erro porque se o trigger fosse para inserção ou alteração de outra tabela já funcionava....tipo algo deste género (inserir na tabela histórico quando é inserido um utilizador na tabela Utilizadores:

DELIMITER $$


DROP TRIGGER IF EXISTS Inserir_Historico$$
CREATE TRIGGER Inserir_Historico
AFTER INSERT ON Utilizadores
FOR EACH ROW BEGIN


INSERT INTO Historico (Data, Hora, Tipo, Tabela, CodTabela, Antiga, Nova, Descricao)
VALUES (CURDATE(), CURTIME(), "INSERT", "Utilizadores", NEW.IDUtilizadores, null,
CONCAT('IDUtilizadores',NEW.IDUtilizadores,'Nome',NEW.Nome, 'Morada:',NEW.Morada, 'Email:',NEW.Email), "Inserção de utilizador");


END;
$$
 
Back
Topo