Ir al contenido principal

Crear, Mantener y Utilizar Secuencias

Una secuencia es una estructura para la generación de valores enteros únicos. Sólo una sesión puede leer el siguiente valor y así obligarla a incrementar. Este es un punto de la serialización, por lo que cada valor generado será único.
Las secuencias son una valiosa herramienta para la generación de Llaves Primarias. Muchas aplicaciones necesitan valores de Llave Primaria generadas automáticamente. El mecanismo de secuencia es independiente de las tablas, y el procesamiento de Commit y Rollback. Esto significa que una secuencia puede emitir miles de valores únicos de un minuto, mucho más rápido que cualquier otro método que implica la selección de una columna de una tabla, actualización, y confirmación de un cambio. El numero se incrementa consecutivamente en orden cada vez que una selección es realizada y el numero  incrementa globalmente no solo dentro de una sesión.

Crear Secuencias
La sintaxis completa para crear una secuencia es la siguiente:

CREATE SEQUENCE [schema.]sequencename
[INCREMENT BY number]
[START WITH number]
[MAXVALUE number | NOMAXVALUE]
[MINVALUE number | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE number | NOCACHE]
[ORDER | NOORDER] ;

Para crear una secuencia es muy simple:

Opciones de Sequence
INCREMENT BY
¿Cuánto mayor (o menor) que el último número emitido debe ser el siguiente número? El valor predeterminado es +1, pero puede ser cualquier número positivo (o número negativo para una secuencia descendente).
START WITH
El punto de inicio de la secuencia: el número emitido por la primera selección. El valor predeterminado es 1, pero puede ser cualquier otro.
MAX VALUE
El número más alto de una secuencia ascendente antes de generar un error o volver a su valor START WITH. El valor predeterminado es sin límite máximo.
MIN VALUE
El número más bajo de una secuencia descendente antes de generar un error o volver a su valor START WITH. El valor predeterminado es sin mínimo.
CYCLE
Controla el comportamiento al alcanzar a MAXVALUE o MINVALUE. El comportamiento predeterminado es dar un error, pero si se especifica CYCLO la secuencia volverá a su posición inicial y repetirse.
CACHE
Para rendimiento, Oracle puede pre emitir valores de la secuencia y cachearlos o guardarlos y luego emitir los valores a los usuarios. El comportamiento por defecto es generar 20 y guardarlos
ORDER
Relevante para una Base de Datos en Cluster: ORDER forza a las instancias  para coordinar el incremente.

Ajustes apropiados para INCREMENT BY, START WITH, MAXVALUE o MINVALUE vendrán de los analistas de negocio. Es muy raro y vuelva a ser utilizada una secuencia, ya que permite la edición secuencia de valores duplicados. Si se está utilizando la secuencia para generar valores de clave principal, CYCLE sólo tiene sentido si hay una rutina en la base de datos que va a eliminar filas.
Almacenamiento en caché los valores de secuencia es vital para el rendimiento. Selección de una secuencia es un punto de serialización en el código de la aplicación: sólo una sesión puede hacer esto a la vez. El mecanismo es muy eficiente: es mucho más rápido que el bloqueo de una fila, la actualización de la fila, y luego abrir con un COMMIT. Pero aún así, la selección de una secuencia puede ser una causa de la discordia entre las sesiones. La palabra clave CACHE ordena a Oracle que Pregenere números de secuencia por lotes. Esto significa que se pueden emitir más rápido que si tuvieran que ser generada bajo demanda.


Comentarios