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