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

Adriano Ferreira aerreira68 em gmail.com
Sex Abr 24 16:56:43 -03 2009


Concordo com o Antonio.
Tenho situações aqui na empresa em que se deseja manter histórico de
alterações e exclusões em determinadas tabelas.  Nestes casos cria-se para
cada uma dessas tabelas uma outra tabela de controle com estrutura igual
porém com alguns campos à mais para registrar a data/hora da operação e se
foi alteração ou mesmo exclusão.  E, através de trigger before update or
delete registra-se o conteúdo OLD de todos os campos da tabela original mais
a data/hora da manutenção efetuada e o tipo da manutenção, se foi alteração
ou exclusão.

Assim, se consegue um histórico individualizado de cada item em qualquer
tabela, e não é preciso varrer a tabela principal em busca de valores OLD e
NEW, pois o processo ocorre a cada alteração ou exclusão.

__
Adriano Ferreira



2009/4/24 Antonio Carlos <a.lima.silva em terra.com.br>

> Hum, posso ate estar "defasado"  mas valor velho e novo é no update e é em
> registro individual, por exemplo : vc altera 10 registros e ao terminar e
> comitar o ultimo, não tem como pegar esses dados, já se vc coloca um
> trigger
> nos eventos da tabela e faz ele disparar a CADA update ai vc conseguiria
> com
> old.value  new.value.
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Kelver Merlotti
> Enviada em: sexta-feira, 24 de abril de 2009 16:26
> Para: FireBase
> Assunto: Re: [firebase-br] Percorrer os campos de uma tabela em uma trigger
>
> Também tenho interesse nisso...
> Que falta num faz um 'FieldByName' :-)
> Abraços!
>
> 2009/4/24 Ivan Guimarães Meirelles <igmeirelles em gmail.com>:
> > 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
> >
>
>
>
> --
> Kelver Merlotti
> Coordenador Editorial do Portal www.ActiveDelphi.com.br
> Contato: kelver em activedelphi.com.br
> Google: kmerlotti em gmail.com
> Msn: kmerlotti em hotmail.com
> Tem um segundo? Então, dá uma olhadinha nisso:
> Um site de publicidades, de Portugal, está pagando em euros (quase 3x
> mais que em reais) pra quem estiver disposto a:
>  * Ler anúncios
>  * Visitar sites
>  * Clicar em banners
>  * Navegar na NET
>  * Ler e-mails
>  * Convidar novos usuários
> O pagamento é feito em cheque! Registra lá!! Não custa nada! ;-)
> http://www.publipt.com/pages/index.php?refid=kmerlotti
>
> ______________________________________________
> 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
>



Mais detalhes sobre a lista de discussão lista