[firebase-br] Percorrer os campos de uma tabela em uma trigger

Magno System magno em speet.com.br
Sex Abr 24 18:09:00 -03 2009


Faça uma trigger after insert assim:

IF NEW.CAMPO <> OLD.CAMPO THEN
   INSERT INTO TABELALOG(VALORATUAL, VALORANTIGO) VALUES (NEW.CAMPO, 
OLD.CAMPO)

Dessa forma não há necessidade de se percorrer a tabela, pois a inserção 
acontecerá no momento da alteração.

----- Original Message ----- 
From: "Ivan Guimarães Meirelles" <igmeirelles em gmail.com>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Friday, April 24, 2009 3:29 PM
Subject: [firebase-br] Percorrer os campos de uma tabela em uma trigger


Olá caros colegas "Firebirdianos"...



Eu preciso criar uma trigger que percorra todos os campos da tabela e faça
uma comparação entre o valor novo (new) e o valor anterior (old) a fim de
registrar em outra tabela as mudanças que ocorreram, quando o usuário
executar um update na tabela.



Eu criei uma SP onde passo o nome da tabela como parâmetro e a SP me retorna
todos os campos.

O código da SP está abaixo e funcionando perfeitamente:



-- ***************************************************************

CREATE PROCEDURE LISTA_CAMPOS_TABELA (tabela varchar(93))

returns (campo varchar(93))

as begin

    for select

        c.rdb$field_name

        from rdb$relation_fields c

        where lower(c.rdb$relation_name) = lower(:tabela)

        order by 1

    into

        :campo

    do

        suspend;

end

-- ***************************************************************



Então eu tentei fazer uma trigger da seguinte maneira:



-- ***************************************************************

CREATE TRIGGER TRIGGER_TESTE FOR TABELA_TESTE

ACTIVE BEFORE UPDATE POSITION 0

AS

declare variable campo varchar(93);

begin

    for select c.campo from lista_campos_tabela('tabela_teste') c

        into :campo

    do begin

                -- > aqui eu preciso pegar o valor anterior e o novo ...
porém o nome do campo está em :campo

                -- > não sei como proceder.

    end

end





-- ***************************************************************



Alguém poderia me dar uma idéia ?? estou utilizando Firebird 2.1



Desde já agradeço a atenção dispensada.

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


--------------------------------------------------------------------------------



No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.0.238 / Virus Database: 270.12.4/2078 - Release Date: 04/24/09 
07:54:00





Mais detalhes sobre a lista de discussão lista