[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