Oracle - Error secuencia Oracle

   
Vista:

Error secuencia Oracle

Publicado por Jimmy (1 intervención) el 19/10/2013 06:44:16
Buenos Dias a todos!!!

Quisiera saber si existe una solución, dándole una opción especial a esta secuencia:
CREATE SEQUENCE sec1
START WITH 1
INCREMENT BY 1
MAXVALUE 10
CYCLE
NOCACHE;

en donde hagamos de cuenta que esta secuencia genera una llave primaria para una tabla que a lo sumo va a tener 10 datos albergados. si agrego todos los datos, osea 10 datos ya no podria agregar mas datos, pero al eliminar un dato, por ejemplo el que tiene la llave primaria (o numero generado por la secuencia) de 5, me imagino que debe existir alguna manera en la cual pueda agregar un nuevo dato con esa llave primaria utilizando la misma secuencia dado que tiene la caracteristica ciclica. Pero lo que ocurre es que si por ejemplo en este caso el current val de la secuencia es 10, la BD me va a generar 4 veces un error, dado que la clave primaria ya existe, y en el momento que el nextval de la secuencia sea 5 si me dejara insertar dicho valor en la tabla.

quisiera saber si existe alguna solucion dandole una opcion a esta secuencia. Se que tal vez muchas personas podran decir que simplemente le de un valor mucho mas grande al MAXVALUE de la secuencia, pero esto lo tome como un simple ejemplo de lo que realmente necesito hacer.

Agradezco enormemente su ayuda!!! Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error secuencia Oracle

Publicado por ulises (39 intervenciones) el 20/10/2013 04:20:32
Alguna instrucción desde oracle como tal no hay.

Asumiendo que vos deseas que al momento en que eliminas un registro la secuencia se reinicie al número eliminado. Podrías probar colocando un trigger en la tabla y ver si te funciona un alter a la secuencia iniciando en el número que borraste
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error secuencia Oracle

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 21/10/2013 19:59:16
Hola Jimmy, personalmente trabajar con secuencias en oracle es para cuestiones muy simples pero no para hacer algo con mucho control como mencionas.

Para tu caso, cuando he necesitado de realizar controles con numeradores para los documentos los cuales forman parte de la llave primaria he trabajado con tablas oracle que me sirven como "numeradores", es decir por ejemplo con los campos : anio_proceso, tipo doc, nro_ini_doc, nro_act_doc, nro_fin_doc, ..etc .. En esta tabla para cada año de proceso y tipo de documento existiria un solo registro que se actualizaria cada vez que realizo una transacción, claro que tambien hay que controlar la concurrencia de usuarios, es decir pueden existir 200 usuarios registrando documentos los cuales van a ser numerados y utilicen mi procedimiento de numeración, esto lo controlamos haciendo bloqueos a nivel de registro con "SELECT .... FOR UPDATE" y los liberamos con un commit es decir cuando se actualiza el numero actual del registro (nro_act_doc para nuestro caso), he aplicado esto y me ha funcionado, esto lo he usado para trabajar casos particulares de numeración de documentos y año de proceso.

En tu caso tendrias que guardar las llaves primarias de los registros eliminados para que luego puedan ser reutilizados, es decir si tengo como ID de tabla los ID de registro 1, 2.....9,10 y elimino el 4, 7, 9 y hago commit de eliminacion debo registrar estos ID para que luego sean tomados al momento de crear supuestamente el registro 11... internamente cuando creo el registro 11 consulto si hay registro eliminados y tomo el primer id menor eliminado que seria el 4 y al crear el registro 11 internamente le coloco el ID 4 y asi... si no existen registros eliminado simplemente actualizo mi tabla numerador y continuo la numeración normalmente....


Saludos

Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error secuencia Oracle

Publicado por luis pablo luis2409@gmail.com (232 intervenciones) el 22/10/2013 16:24:35
No es un error en secuencia oracle, es un requerimiento tuyo, pues deseas que una secuencia se comporte como tú deseas.
Las secuencias sirven para generar correlativos, pero para tu caso específico no aplica. He respondido tu pregunta de como podrías lograr lo que deseas, es una idea.
Espero te despeje en algo el panorama, hay muchas formas de resolver un problema.

Saludos


Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar