[firebase-br] Log em uma tabela diferente

Marcos Weimer marcosweimer em gmail.com
Qui Dez 22 10:05:10 -03 2016


Aqui uso a mesma trigger para tudo (insert/update/delete), chamo uma
procedure que fica responsável por gravar (em tabelas com muitos campos
isso é essencial para a trigger não exceder o tamanho maximo permitido (não
lembor qual é o tamanho agora, mas sei que fiz por procedure pq aconteceu
de exceder o tamanho, e vendo depois, ficou até mais facil de entender))

mesma trigger no after insert/update/delete

if (Inserting) then
  if (new.AFINIDADE is not null) then execute procedure
log_gravar_coluna(:var_id, 'AFINIDADE', null, new.AFINIDADE );
else if (Updating) then
  if (old.AFINIDADE <> new.AFINIDADE) then execute procedure
log_gravar_coluna(:var_id, 'AFINIDADE', old.AFINIDADE, new.AFINIDADE );
else if (Deleting) then
  if (old.AFINIDADE is not null) then execute procedure
log_gravar_coluna(:var_id, 'AFINIDADE', old.AFINIDADE, null);


ddl da procedure que grava coluna.....

create or alter procedure LOG_GRAVAR_COLUNA (
    OPERACAO_ID integer,
    NOME_COLUNA varchar(31),
    OLD_VALUE varchar(5000),
    NEW_VALUE varchar(5000))
as
begin
      execute statement (
      'INSERT INTO log_campos (ID, OPERACAO_ID, COLUNA, VALOR_ANTERIOR,
VALOR_NOVO)
      VALUES (GEN_ID(GEN_LOG_CAMPOS, 1), ?, ?, ?, ?);')
      (:OPERACAO_ID, :NOME_COLUNA, :OLD_VALUE, :NEW_VALUE)
   WITH AUTONOMOUS TRANSACTION
   AS USER 'SYSDBA'
   PASSWORD 'masterkey'
   ROLE 3
  on external '127.0.0.1:caminhodobanco';
end^

SET TERM ; ^



-=Ma®©oS=-
Marcos R. Weimer
Delphi / C# / ASP.NET / PHP / WebServices / Firebird



Mais detalhes sobre a lista de discussão lista