routine

MySQL Triggers

Trigger, do inglês “gatilho”, é o nome dado a procedimentos armazenados numa base de dados e activados por eventos específicos numa tabela. No conhecido SGBD MySQL (agora da Sun) foram introduzidos na versão 5.0.2.

Toda a documentação relativa ao uso de Triggers poderá ser consultada no site do MySQL, devendo dedicar-se especial atenção à Secção D.1. “Restrictions on Stored Routines, Triggers, and Events” relativa às restrições a que estes estão sujeitos.

Estas linhas devem-se ao tempo que perdi ao tentar justificar o erro: “Not allowed to return a result set from a trigger“.
À semelhança dos procedimentos, qualquer operação de extracção de informação, entre outras (ver restrições), tem obrigatoriamente de ser feita para variáveis definidas pelo utilizador (incluo nestas a possibilidade de os dados serem enviados para ficheiro).

Estando agora consciente destas restrições deixo um exemplo para aqueles que depararem com esta limitação:

CREATE TRIGGER teste AFTER INSERT ON tabela
FOR EACH ROW
BEGIN
SET @newID;
SELECT @newID:=NEW.id;
END;

Embora o valor de NEW.id seja armazenado na variável previamente definida, o resultado da execução do trigger será um set com o elemento @newID.
A fórmula de sucesso segue abaixo:

CREATE TRIGGER teste AFTER INSERT ON tabela
FOR EACH ROW
BEGIN
SET @newID;
SELECT NEW.id INTO @newID;
END;

Tags: , , , ,

Thursday, August 14th, 2008 mysql, programação, software, web 4 Comments