[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