Secuencias

derneume
12 de Enero del 2006
Hola a todos, estoy haciendo un programa en Java con acceso a Oracle. Tengo una lista de piezas, cuya clave primaria la genero mediante una secuencia. En un momento dado el usuario puede borrar una pieza de esa tabla, y posteriormente podrá insertar las piezas que desee. El problema que planteo es si es posible y cómo, hacer que una secuencia asigne el primer valor libre que tenga. Es decir si tienes las piezas p1, p2, p3, p4, p5 y borras p2, que en la siguiente insersión en lugar de asignar p6, asigne p2 (ya que es la primera que está libre), y que una vez cubierta p2, en la siguiente insersión asigne p6 (ya que, en ese caso sería la primera que esté libre). Gracias.
www.josemanuelmunozborreguero.tk

chemian
12 de Enero del 2006
no puedes

eddie_
12 de Enero del 2006
Haz un procedimiento que actualize un valor en una tabla, y que cada vez que lo llames busque un valor disponible.
Pero cuidado con los problemas de concurrencia (dos al mismo tiempo), tendrias que serializar la operacion. Por este motivo este enfoque no es nada recomendable, ya que no es escalable. Es realmente necesario ese requerimiento? No puedes asignar simplemente una secuencia?

leoriyagami
12 de Enero del 2006
Bueno dos cosas, 1º- Si la secuencia la esta llevando en JAVA, te queda mas facil hacer el seguimiento de los registros insertados y los registros borrados. 2º- Si la secuencia es de la base de datos, eso que dices no se puede hacer, solo puedes consultar el valor actual de la secuencia, y el valor siguiente. Mi recomendación es que no uses secuencias, son bastantes limitadas, mejor trata de crear tu propia llave primaria.

derneume
12 de Enero del 2006
Gracias a todos, al final he conseguido el resultado que quería, os cuento a er qué os parece. Me he creado una tabla de piezas_borradas, en la que guardo el número (sin la p del codigo) de las piezas que se van borrando y cuando quiero insertar una nueva pieza, consulto dicha tabla ordenada ascendentemente, y asigno el primer valor, y a la hora de hacer el insert en la tabla de pieza, compruebo si hay algun valor en piezas_borradas, si lo hay concateno con p, y borro el numero de la lista de piezas_borradas, y si no lo hay simplemente concateno p con el siguiente valor de la secuencia. Por el tema de que accedan varios usuarios a la tabla creo que no tengo que preocuparme, puesto que sólo un usuario que es el administrador de la BD. será quien pueda modificar informacion, los demas usuarios solo tienen permisos de consulta sobre las tablas del comprador(administrador). Gracias por las sugerencias.
www.josemanuelmunozborreguero.tk

sole
12 de Enero del 2006
muy bien!!