[firebase-br] log de ações em tabelas

Daniel Bastos danbastos em gmail.com
Sex Out 24 10:56:10 -03 2008


Cara, até tem como fazer um loop nos campos fazendo um select na
tabela RDB$RELATION_FIELDS e utilizando um cursor ou um for, mas não
acho que vc vá conseguir utilizar os objetos "NEW" e "OLD". E ai não
adiantaria nada para o seu caso.


2008/10/22 Luis Otavio <luisotavio.madureira em gmail.com>:
> Caros colegas criei uma trigger para gerenciar ações realizadas em campos da
> tabela (conforme script abaixo), mas acho que pode ser bem mais reduzida se
> houvesse um meio de fazer um looping pelos campos da tabela.
> Poderiam me ajudar?
>
> SCRIPT ABAIXO:
> CREATE OR ALTER TRIGGER CLIENTES_AU0 FOR CLIENTES
> ACTIVE AFTER UPDATE POSITION 0
> AS
>  declare variable s char(80);
>  declare variable z char(80);
> begin
>  /* ALTERAÇÃO NO CAMPO NOME */
>  if (
>      (new.nome <> old.nome) or
>      (old.nome is null and new.nome is not null) or
>      (old.nome is not null and new.nome is null)
>     )
>  then
>  begin
>  if (old.nome is null) then s = 'vazio'; else s = old.nome;
>  if (new.nome is null) then z = 'vazio'; else z = new.nome;
>  insert into
> log(log.codigo,log.codigo_programa,log.codigo_usuario,log.datahora_acao,LOG.tipo_acao,log.acao)
>  VALUES (null, 'A0100','2',current_timestamp ,'ALTERACAO','NOME de: '||:s||'
> para: '||:z);
>  end
>  /* ALTERAÇÃO NO CAMPO FANTASIA */
> if (
>      (new.fantasia <> old.fantasia) or
>      (old.fantasia is null and new.fantasia is not null) or
>      (old.fantasia is not null and new.fantasia is null)
>    )
>  then
>  begin
>  if (old.fantasia is null) then s = 'vazio'; else s = old.fantasia;
>  if (new.fantasia is null) then z = 'vazio'; else z = new.fantasia;
>  insert into
> log(log.codigo,log.codigo_programa,log.codigo_usuario,log.datahora_acao,LOG.tipo_acao,log.acao)
>  VALUES (null, 'A0100','2',current_timestamp ,'ALTERACAO','FANTASIA de:
> '||:s||' para: '||:z);
>  end
>  /* ALTERAÇÃO NO CAMPO CEP */
> if (
>      (new.cep <> old.cep) or
>      (old.cep is null and new.cep is not null) or
>      (old.cep is not null and new.cep is null)
>    )
>  then
>  begin
>  if (old.cep is null) then s = 'vazio'; else s = old.cep;
>  if (new.cep is null) then z = 'vazio'; else z = new.cep;
>  insert into
> log(log.codigo,log.codigo_programa,log.codigo_usuario,log.datahora_acao,LOG.tipo_acao,log.acao)
>  VALUES (null, 'A0100','2',current_timestamp ,'ALTERACAO','CEP de: '||:s||'
> para: '||:z);
>  end
> ..... ASSIM ATÉ O ÚLTIMO CAMPO.
>
>
> ______________________________________________
> 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
>



-- 
Abs
Daniel A. Bastos


Mais detalhes sobre a lista de discussão lista