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

Luis Otavio luisotavio.madureira em gmail.com
Qua Out 22 17:41:17 -03 2008


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. 






Mais detalhes sobre a lista de discussão lista