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

Zottis zottissistemas em brturbo.com.br
Sex Abr 24 17:34:01 -03 2009


olá, pelo que entendi, você quer fazer o que a auditoria mencionada pelo 
Cantú
faz, ou seja teria uma tabela mais ou menos asssim:

CREATE TABLE AUDITORIA......
 TABELA .....   ,
NOME_CAMPO..........,
VALOR_VELHO..........,
VALOR_NOVO............,
DATA.............................,
USUARIO.......................;

Também estou tentando fazer algo parecido, mas o problema é em "alimentar" 
esta tabela
teria que ser com triggers, mas não sei como fazer.


espero ter ajudado.




Zottis(TeamFB Users)

Zottis Sistemas - 2009 Ano XII
Programação Delphi/PHP/Firebird/MySQL

"Um homem só tem o direito de olhar
  a um outro de cima para baixo, quando
  vai ajuda-lo a levantar-se".
                   Gabriel Garcia Marquez
----- Original Message ----- 
From: "Ivan Guimarães Meirelles" <igmeirelles em gmail.com>
To: "'Carlos H. Cantu'" <listas em warmboot.com.br>; "'FireBase'" 
<lista em firebase.com.br>
Sent: Friday, April 24, 2009 5:09 PM
Subject: [firebase-br] RES: Percorrer os campos de uma tabela em uma trigger


Olá Cantu...

Obrigado pelo interesse...

A idéia seria criar uma trigger genérica... pois são várias tabelas...
Por isso criei a SP onde passo o nome da tabela como parâmetro e a mesma me
retorna os campos.

Mas já vi que a melhor saída vai ser criar uma UDF para isso...

Atenciosamente,
Ivan Meirelles.

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

No caso, vc ja sabe a tabela e sabe os campos que existem nela, então
meu conselho eh vc criar o trigger já com as comparações para cada
campo existente.

Aconselho vc dar uma olhada no artigo do site sobre auditoria de banco de
dados.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br


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





______________________________________________
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



______________________________________________
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