[firebase-br] Trigger nao Funciona
Daniel / Tecnobyte
temp em tecnobyte.com.br
Qui Out 28 22:01:37 -03 2004
> a opcao NEW. so funciona em BEFORE por isso sua trigger esta dando update
> com valor Nulo !
> e so trocar a trigger de AFTER para BEFORE que vai fucnionar se nao tem
erro
> de sintaxe nela. Logico !
> Marcilio Soares
Não sei se entendi errado, mas acredito que sua afirmação não condiz com a
realidade.
Fiz alguns testes, usando para isto o script abaixo:
CREATE TABLE TESTE (
CODIGO INTEGER NOT NULL,
CONSTRAINT PK_TESTE PRIMARY KEY (CODIGO));
CREATE TABLE LOGTESTE(
TEXTO VARCHAR(100));
SET TERM ^ ;
CREATE TRIGGER TRIG_TESTE_AFTERINSERT FOR TESTE AFTER INSERT AS
BEGIN
INSERT INTO LogTeste VALUES(
'INSERT: NEW.Codigo = ' || NEW.Codigo);
END^
CREATE TRIGGER TRIG_TESTE_AFTERUPDATE FOR TESTE AFTER UPDATE AS
BEGIN
INSERT INTO LogTeste VALUES(
'UPDATE: OLD.Codigo = ' || OLD.Codigo || ', ' ||
'NEW.Codigo = ' || NEW.Codigo);
END^
Depois inseri quatro registros na tabela TESTE, com os códigos 1, 2, 3 e 4.
Posteriormente alterei todos eles para 6, 7, 8 e 9, respectivamente. O log
gerado na tabela LOGTESTE foi:
INSERT: NEW.Codigo = 1
INSERT: NEW.Codigo = 2
INSERT: NEW.Codigo = 3
INSERT: NEW.Codigo = 4
UPDATE: OLD.Codigo = 1, NEW.Codigo = 6
UPDATE: OLD.Codigo = 2, NEW.Codigo = 7
UPDATE: OLD.Codigo = 3, NEW.Codigo = 8
UPDATE: OLD.Codigo = 4, NEW.Codigo = 9
Isto prova que o prefixo NEW funciona normalmente em triggers do tipo AFTER
UPDATE, contrariando sua afirmação.
O teste foi realizado com Firebird 1.5.
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
Mais detalhes sobre a lista de discussão lista