[firebase-br] Percorrer os campos de uma tabela em uma trigger
Kelver Merlotti
kmerlotti em gmail.com
Sex Abr 24 16:25:58 -03 2009
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
Mais detalhes sobre a lista de discussão lista