[firebase-br] inserir dados em tabela automaticamente
Jeferson Oliveira
jefersonfoliveira em gmail.com
Qui Out 18 18:06:18 -03 2007
Ezequiel Pianegonda wrote:
> para cada tabela, são criadas 3 triggers, uma para cada operação
> (insert/update/delete);
Isso.
> uma das triggers insere um registro na tabela de operações e n (numero de
> campos da tabela que sofreu o insert||update||delete) na tabela de
> registros?
Não uma, mas sim cada uma, das triggers: aciona, uma única vez, o
procedimento responsável por inserir um registro na tabela de operações;
e aciona uma vez, para cada campo que precisa ser logado, o procedimento
responsável pela inclusão de um registro na tabela de campos.
O critério de decisão para gravação do campo é, basicamente, se houve
alteração, mas ele varia de acordo com o tipo de trigger, exemplos:
After insert:
if (new.CAMPO is not null) then
execute procedure GRAVAR_LOG_CAMPO ...
After update:
if (((old.CAMPO is null) and (new.CAMPO is not null and
substring(new.CAMPO from 1 for n) <> '')) or ((old.CAMPO is not null)
and (new.CAMPO is null)) or (old.CAMPO not like new.CAMPO)) then
execute procedure GRAVAR_LOG_CAMPO ...
After delete:
if (old.CAMPO is not null) then
execute procedure GRAVAR_LOG_CAMPO ...
Vejo que muitos ficaram interessados no assunto, mas percebam que meu
mérito está mais na parte da automação do processo de geração de
triggers, e de algumas abstrações no processo de gravação de registro,
do que na modelagem propriamente, pois essa foi inspirada, não copiada,
mas inspirada no IBLogManager. Então sugiro, como já sugerido neste
mesmo tópico pelo Kleber, que testem a versão de avaliação do utilitário
IBLogManager.
Além de servir como fonte de inspiração, em muitos casos será mais
barato adquirir uma licença dele do que implementar a gravação dos logs,
e uma interface para consulta e análise tão boa quanto a que ele oferece.
Abraço!
Jeferson Oliveira
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird
Mais detalhes sobre a lista de discussão lista