1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Trigger mysql na própria tabela

Discussão em 'Programação' iniciada por Vandong, 20 de Novembro de 2012. (Respostas: 2; Visualizações: 2353)

  1. Vandong

    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):

    Não sei mesmo o que poderá estar errado...

    Cumps,
     
    Última edição: 20 de Novembro de 2012
  2. xBoShY

    xBoShY Power Member

    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;
    
     $$
     
  3. Vandong

    Vandong Power Member

    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:

     

Partilhar esta Página