RE: como lograr campo consecutivo sin fallar ?

From: "Javier Aquino H(dot)" <JAquino(at)LexusEditores(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: como lograr campo consecutivo sin fallar ?
Date: 2008-07-22 17:13:46
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAM2s7SGV8UJPhOCUGX7igBnCgAAAEAAAABGFwOpc9BBMqyTDafa/DVcBAAAAAA==@LexusEditores.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Roberto Rodríguez
Pino
Enviado el: jueves, 17 de julio de 2008 11:47
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] como lograr campo consecutivo sin fallar ?

2008/7/17 Robert J. Briones C. <robert(dot)briones(at)gmail(dot)com>:
> El día 16 de julio de 2008 23:24, Carlos Mendez <lucas1850(at)gmail(dot)com>
escribió:
>> Hola, que tal
>>
>> como puedo lograr que un campo de una tabla aparezcan numeros
>> consecutivos sin fallar, 1, 2, 3, 4, 5, etc. con serial a veces falla
>> porque a veces hay errores y se salta del 2 al 4 y el 3 se pierde,
>> yo creo que una forma seria calcular el max de este campo y sumarle
>> +1 y asi sucesivamente, lo pregunto porque tengo que hacer un
>> programa de facturacion y no debe perder ni un solo consecutivo no
>> debe haber saltos o perdidas de numeros, Agradeciendo de antemano
>> cualquier ayuda o sugerencia, me despido, saludos.
>>
>
> Muchas veces se pierden los numeros por una cosa de eliminacion de datos.
> la forma que dices tu . es la que mayormente se ocupa, pero una vez
> creado el 1, 2, 3, 4, 5 y eliminas el tres, te quedará como, 1,2,4,5 y
> el próximo que se agregará será el 6, en el caso de un sistema de
> facturacion, las facturas no se eliminas, solo se anulan, así el 3 en
> este caso . seguira ahí, pero como anulado.
>
> yo nunca he tenido problemas de que se salte un numero.
> revisa el script que ocupas.
>

> Yo tengo un problema similar. Se salta el correlativo en caso de que haya
> habido un fallo en la inserción.
> Yo estoy ocupando jdbc. Necesitaba hacer 2 inserciones, donde la segunda
> dependia de la primera... pero si habia algun problema en la segunda, la
> primera no debia llevarse a cabo. Para lo cual aplicaba un rollback.
> Pero asi y todo se seguian "quemando" los identificadores de la
secuencia.
> Despues revise la cantidad de numeros disponbles y era una suma
> considerable, asi que no le di mucha importancia (en mi problema, me
> indiferente que se salte de un 3 a un 6)... pero igual me quedo la duda de
> como se podria solucionar esto.
>¿Se puede de alguna manera?
> Saludos!
> Roberto

Yo tengo una tabla de correlativos asi:

Tabla: t_correlativo
Tipo_doc char(2) PK
Serie_doc number(3) PK
Numero_doc number(8)

Los pasos son sencillos:

1. Primero incrementas el valor del correlativo (numero_doc) que corresponda
al documento y a la serie que estás trabajando.
2. haces un select para traer el correlativo generado (numero_doc)
3. usas este número para tu tabla de movimientos.

Ya que todos estos pasos están dentro de una transacción el registro del
correlativo correspondiente a al documento y serie permanecen bloqueados
mientras no se haga un roolback o commit.

Ojo. El paso 1 y 2 se pueden hacer en un solo update con retorno de valores
y finalmente también se puede meter este proceso dentro de un trigger en la
tabla de movimientos.

Saludos,

Javier.

--
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que está limpio.
For all your IT requirements visit: http://www.transtec.co.uk

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Carlos Mendez 2008-07-22 17:54:28 Re: problema con dump de una bd
Previous Message mAyErLiNg .M. 2008-07-22 15:14:03 RE: Tabla temporal