[firebase-br] Incrementar Generator na Trigger After Insert

Fernando Reis Guimarães fernandobhz em gmail.com
Ter Dez 19 15:11:26 -03 2006


tive uma ideia, cria uma pk com before insert i cria outra trigger afert
insert que atulize outro campo como nosso amigo rodrigo citou, para isso
crie um indice desc no campo, e mande pegar o ultimo número tipo : update
tabela set campo = ( select max(campo) from tabela) + 1


Em 19/12/06, Rodrigo A. de Freitas <rodrigo em solucoeseinformatica.com.br>
escreveu:
>
> Hmm... Esse campo código não é chave primária, é ? Senão você terá um
> problema de violação de chave primária no momento em que mais de um
> usuário estiver usando o sistema simultaneamente e ambos gravarem o valor
> "0" no banco de dados;
>
> Claro que, dependendo do número de usuários, a chance é pequena, mas ainda
> sim ela existe.
>
> Se existe a necessidade de você manter um campo com codificação
> sequencial, que não pule um número ou se repita, é aconselhável que você
> crie outro campo para PK, com o valor dele sendo alimentando por um
> generator em uma trigger no before insert, e você pode criar uma rotina
> que verifique a disponibilidade códigos, que pode ser alimentada via SP ou
> trigger.
>
> []'s
>
> Rodrigo A. de Freitas
>
>
> > 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
> >
> >
>
>
>
> ______________________________________________
> 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
>



-- 
Atenciosamente,
Fernando Reis Guimarães.

Contatos
fernando em fernandobhz.com
http://www.fernandobhz.com
Celular 9213-3727.



Mais detalhes sobre a lista de discussão lista