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

Ivan Guimarães Meirelles igmeirelles em gmail.com
Sex Abr 24 17:06:00 -03 2009


Olá Sandro...

Obrigado pelo interesse... 

Quanto ao uso de triggers não tenho duvida alguma... 
Não quero percorrer todos os registros da tabela... quero percorrer todos os
campos de um registro alterado e verificar qual desses campos sofreram
alteração...

E registrar em uma outra tabela as alterações que ocorreram... por exemplo:
Registrar q o nome do cliente foi alterado de "ANTONIO DA SILVA" para
"ANTONIO CARLOS DA SILVA"

Porém... o usuário pode alterar mais de um campo no mesmo registro... por
isso desejo correr todos eles e registrar cada alteração.

Não sei se fui claro...

Atenciosamente, Ivan Meirelles.

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Sandro
Enviada em: sexta-feira, 24 de abril de 2009 15:55
Para: FireBase
Assunto: Re: [firebase-br] Percorrer os campos de uma tabela em uma trigger

Voce faz apenas a trigger before update para pegar o campo antigo e
atualizar na tabela nova.

Não tem o porque varrer a tabela toda, pois o registr modificado não tem
como fugir da trigger.

Se vc deu update nele, a trigger ja vai captar, não precisar ir atraz dos
outros registros, pois quandos eles foram modificados a trigger ja fez o
serviço dela naquele momento.

Entendeu?


Grato
----- 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


______________________________________________
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
 

__________ Informação do ESET Smart Security, versão da vacina 4034
(20090424) __________

A mensagem foi verificada pelo  ESET Smart Security.

http://www.eset.com
 
 

__________ Informação do ESET Smart Security, versão da vacina 4034
(20090424) __________

A mensagem foi verificada pelo  ESET Smart Security.

http://www.eset.com
 





Mais detalhes sobre a lista de discussão lista