[firebase-br] Aos interessados: Omelhor Autoincrementosequencial

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Qui Abr 6 11:11:12 -03 2006


Bom, deixa eu por lenha da fogueira...

NÃO EXISTE SOLUÇÃO MÁGICA PARA NÚMEROS ININTERRUPTOS SEQUENCIAIS EM BANCO DE 
DADOS RELACIONAIS.

Se você precisa se preocupar em "Sequencias Reais" em Notas Fiscais, 
Cheques, e outros documentos deste porte, não adianda usar um 
Sequence/Generator (nem no Oracle!!!), e tem que se ter muito sangue frio 
para se utilizar "Select Max" em aplicações com mais que meia-dúzia de 
operadores simultâneos.

Há paliativos "universais" para se resolver isto, entre eles uma "tabela de 
gabarito" contendo (dependendo do caso) os "furos" e códigos ainda não 
utilizados na emissão de documentos. Só vale lembrar, que para isto 
funcionar, é necessário que esta tabela esteja numa transação "diferente" 
(auto-commit, read-commited, with lock), onde só será consultada e alterada, 
após o Commit da transação principal.

Também há soluções "exclusivas" do InterBase/FireBird... pode-se utilizar 
"eventos" para capturar qual foi o último número de nota/cheque emitido e 
assim criar uma sequencia sem falhas.

(Cantu que tal acrescentar este assunto na temática das palestras do 3º FDD 
???)

 ======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================

----- Original Message ----- 
From: "Andrei Luís" <compuvale.software em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, April 06, 2006 9:17 AM
Subject: Re: [firebase-br] Aos interessados: Omelhor 
Autoincrementosequencial


Uma solução que se usava bastante na época do Clipper, era de uma tabela a
parte para guardar a sequência. Ex.:

Tabela     Campo   Sequencia
Clientes    ID            1
Produtos  ID            4
Pedidos   ID             10
...

Acho que saiu na Clube Delphi ou na SQL Magazine uns meses atras uma solução
parecida com essa, o título era algo como: "Campos auto-incremento para
qualquer BD". O colunista usou Firebird para mostrar os exemplos.

[]
Andrei


Em 06/04/06, Luis Asensio - Control/P Sistemas <luis em controlp.com.br>
escreveu:
>
> Boa dia a todos!!!
>
>        Essa semana fiz um teste comparando a eficiencia do auto-incremento
> das duas formas descritas. Uma realizando um MAX na tabela e outra usando
> a
> Generator. O teste foi bem simples: Rodei uma aplicatico no qual me inflou
> uma determinada tabela em 100.000 e inserir um cronometro interno para
> poder
> comparar o tempo. O resultado foi uma diferença de 3:00 min, a mais para o
> Trigger com o MAX. O Generator com muitos registros é mais rápido acima de
> 20.000 registros. Concordo que para um sequencial integro o MAX minimiza o
> problema.
>
>
> Abraços
>
>
> Luis Asensio
> Control/P Sistemas
> Setor de Desenvolvimento
> luis em controlp.com.br
> http://www.controlp.com.br
>
> -----Original Message-----
> From: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> On Behalf Of Listas - VirtualComp
> Sent: quarta-feira, 5 de abril de 2006 18:12
> To: Carlos H. Cantu; FireBase
> Subject: Re: [firebase-br] Aos interessados: Omelhor
> Autoincrementosequencial
>
> CREATE TRIGGER GER_COD_CLIENTES FOR CLIENTES ACTIVE BEFORE INSERT POSITION
> 0
> AS declare variable cod integer; begin  select max(codigo_cli)  from
> clientes  where clientes.empresa_cli = new.empresa_cli  into :cod;  if
> (cod
> is null) then
>     cod = 0;
> new.codigo_cli = cod + 1;
> end
>
>
> com essa trigger eu tenho 3..4 empresas cadastradas cada empresa tem uma
> sequencia clientes e nunca da problema...
>
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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