[firebase-br] Incrementar Generator na Trigger After Insert

Rubem Nascimento da Rocha djpardalrocha em hotmail.com
Ter Dez 19 13:07:17 -03 2006


Uma alternativa então seria não usar generators, e sim uma tabela onde vc 
mesmo, na sua aplicação, controla a geração dos números sequencias para 
chave das tabelas. Só que daí vc deverá ter um cuidado redobrado para manter 
uma seqüência de números ininterrupta nas seguintes condições:

1) Alta concorrência de acesso ao banco de dados;
2) Estornar (por assim dizer) os valores seqüênciais gerados para cada 
tabela envolvida em uma transação, sem perder a seqüência.

Particularmente, acho perda de tempo esse controle minuscioso de seqüência 
de chaves para casos em que tenha ocorrida alguma exceção no banco de dados 
ou na aplicação que necessite um rollback na transação. É mais código para 
codificar e mais situações que vc (e não o banco de dados) devem prever para 
que a seqüência fique ininterrupta. Em todo caso, boa sorte!

Sds.

>From: -=SchiavoR=- <schiavor em gmail.com>
>Reply-To: FireBase <lista em firebase.com.br>
>To: FireBase <lista em firebase.com.br>
>Subject: Re: [firebase-br] Incrementar Generator na Trigger After Insert
>Date: Tue, 19 Dec 2006 12:57:55 -0200
>
>Obrigado aos que responderam,
>
>Qdo eu mandei a mensagem, esqueci de mencionar que eu já sei utilizar,
>inclusive já utilizo em alguns sistemas o incremento do gerador na
>trigger Before Insert, porém quando utilizado o incremento neste
>contexto se houver alguma exceção no momento da inclusão, o código que
>foi inserido será perdido devido ao rollback.
>Estou querendo discutir os problemas, vantagens e desvantagens de fazer
>este incremento no evento After Insert, portanto no exemplo que enviei
>todos os novos registros são inseridos com código 0, e após a efetiva
>gravação no banco o código é atualizado com o valor correto, e o gerador
>incrementado.
>
>[ ]'s
>Rodrigo Schiavo
>
>Rodrigo A. de Freitas escreveu:
> > Rodrigo,
> >
> > Uma melhor implementação para isso seria no evento Before Insert:
> >
> > CREATE TRIGGER CLIENTES_BI FOR CLIENTES
> > ACTIVE BEFORE INSERT POSITION 0
> > AS
> > BEGIN
> >     IF NEW.CODIGO = 0 THEN
> >         NEW.CODIGO = GEN_ID(GEN_CLIENTES_ID,1);
> > END
> >
> > []'s
> >
> > Rodrigo A. de Freitas
> > Análise & Desenvolvimento
> >
> > Soluções & Informática
> > www.solucoeseinformatica.com.br
> >
> >
> >
> >> Galera, blz?
> >>
> >> Estou pensando em fazer essa Trigger no evento After Insert, o custo
> >> dela seria muito grande para o banco?
> >>
> >> CREATE TRIGGER CLIENTES_AI FOR CLIENTES
> >> ACTIVE AFTER INSERT POSITION 0
> >> AS
> >> BEGIN
> >>   UPDATE CLIENTES SET CODIGO = GEN_ID(GEN_CLIENTES_ID,1) WHERE CODIGO = 
>0;
> >> END
> >>
> >> Att.
> >> Rodrigo Schiavo
> >>
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para editar sua configuração na lista, use o endereço
> >> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> >>
> >>
> >
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para editar sua configuração na lista, use o endereço 
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço 
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa

_________________________________________________________________
MSN Busca: fácil, rápido, direto ao ponto.  http://search.msn.com.br





Mais detalhes sobre a lista de discussão lista