[firebase-br] Incrementar Generator na Trigger After Insert

Rodrigo A. de Freitas rodrigo em solucoeseinformatica.com.br
Ter Dez 19 15:06:09 -03 2006


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
>
>






Mais detalhes sobre a lista de discussão lista