En este tutorial te enseñaré cómo utilizar la sentencia CREATE SEQUENCE de Oracle para crear una nueva secuencia en tu base de datos. La sentencia CREATE SEQUENCE te ofrece la capacidad de generar una secuencia ordenada de números, con la flexibilidad de especificar diversas propiedades como el nombre de la secuencia, el incremento entre los números, el número de inicio, el valor máximo y mínimo, la capacidad de ciclar o no, la cantidad de valores en memoria para rápido acceso, y si los números deben generarse en orden de solicitud.
Las secuencias en Oracle son extremadamente útiles para generar identificadores únicos y secuenciales en tus tablas, ya sea para claves primarias o para otros propósitos. También te permiten asociar una secuencia a una tabla y utilizarla en momentos de inserción para generar automáticamente los valores de la columna asignada a dicha secuencia.
En los ejemplos que te mostraré a continuación, verás cómo puedes utilizar las secuencias en Oracle para generar números de secuencia de manera efectiva. Además, te mencionaré una alternativa que puedes utilizar, la columna de identidad, que ofrece funcionalidades similares a las secuencias pero con una sintaxis más sencilla.
¿Qué es CREATE SEQUENCE en Oracle?
La sentencia CREATE SEQUENCE en Oracle es una función que te permite definir y crear una secuencia en tu base de datos. Una secuencia es una estructura de datos que genera números de manera secuencial, según las especificaciones que le proporciones.
La sentencia CREATE SEQUENCE te permite establecer diversas propiedades de la secuencia, como el nombre, el incremento entre los números, el número de inicio, el valor máximo y mínimo, entre otros. También te permite determinar si la secuencia debe ciclar o no, es decir, si debe volver a comenzar desde el número de inicio después de alcanzar el valor máximo. Adicionalmente, puedes especificar la cantidad de valores que se deben guardar en memoria para un acceso rápido y si los números deben generarse en orden de solicitud.
Esta funcionalidad de Oracle es especialmente útil cuando necesitas generar identificadores únicos y secuenciales para tus registros, como por ejemplo, para las claves primarias de tus tablas. Además, la sentencia CREATE SEQUENCE te brinda la flexibilidad de asociar la secuencia a una tabla y utilizarla en el momento de la inserción para generar automáticamente los valores de la columna asignada.
Sintaxis de CREATE SEQUENCE
La sintaxis de la sentencia CREATE SEQUENCE en Oracle es la siguiente:
CREATE SEQUENCE nombre_secuencia [INCREMENT BY valor_incremento] [START WITH valor_inicio] [MAXVALUE valor_maximo | NOMAXVALUE] [MINVALUE valor_minimo | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE cantidad_valores | NOCACHE] [ORDER | NOORDER];
A continuación, te explico brevemente cada uno de los elementos de la sintaxis:
- nombre_secuencia: es el nombre que le asignas a la secuencia.
- INCREMENT BY: define el valor de incremento entre los números de la secuencia. Por defecto, es 1.
- START WITH: especifica el número de inicio de la secuencia. El valor por defecto es 1.
- MAXVALUE: establece el valor máximo permitido para la secuencia. Por defecto, es el máximo valor permitido por Oracle.
- MINVALUE: define el valor mínimo permitido para la secuencia. Por defecto, es el mínimo valor permitido por Oracle.
- CYCLE | NOCYCLE: determina si la secuencia debe ciclar o no. Si se alcanza el valor máximo y la secuencia es ciclada, volverá a comenzar desde el número de inicio. La opción NOCYCLE hará que la secuencia se detenga después de alcanzar el valor máximo.
- CACHE | NOCACHE: especifica la cantidad de valores que se deben guardar en memoria para un acceso rápido. La opción NOCACHE hace que no se almacenen valores en memoria.
- ORDER | NOORDER: establece si los números de la secuencia deben generarse en orden de solicitud. La opción ORDER garantiza la generación ordenada. La opción NOORDER genera los números de forma más rápida, pero sin garantía de orden.
Ahora que conoces la sintaxis de la sentencia CREATE SEQUENCE, podrás utilizarla para crear tus propias secuencias en Oracle de manera personalizada y adaptada a tus requerimientos.
Ejemplo de creación de una nueva secuencia
Veamos un ejemplo de cómo crear una nueva secuencia en Oracle utilizando la sentencia CREATE SEQUENCE.
Supongamos que deseamos crear una secuencia llamada «seq_empleados» que genere números de identificación para los empleados de una empresa. Queremos que la secuencia comience en 100, incremente los valores en 1, tenga un valor máximo de 1000 y tenga un caché de 20 valores. Además, queremos que los números se generen en orden de solicitud.
Aquí está el código para crear esta secuencia:
CREATE SEQUENCE seq_empleados INCREMENT BY 1 START WITH 100 MAXVALUE 1000 CACHE 20 ORDER;
Una vez que ejecutes este código en tu base de datos, la secuencia «seq_empleados» estará lista para ser utilizada.
Recuerda que puedes personalizar los valores de inicio, incremento, máximo, mínimo, caché y orden según tus necesidades. La sentencia CREATE SEQUENCE te brinda la flexibilidad para ajustar la secuencia a tus requerimientos específicos.
Configuración de la secuencia
La sentencia CREATE SEQUENCE en Oracle te permite configurar diversas propiedades para tu secuencia. A continuación, te explicaré en detalle las opciones de configuración que puedes utilizar:
- INCREMENT BY: Esta opción te permite especificar el valor de incremento entre los números de la secuencia. Por defecto, el valor es 1, lo que significa que los números se generarán de forma secuencial. Sin embargo, puedes ajustar este valor según tus necesidades. Por ejemplo, si estableces INCREMENT BY 5, los números se generarán con un incremento de 5.
- START WITH: Utiliza esta opción para definir el número de inicio de la secuencia. El valor por defecto es 1, pero puedes establecer cualquier valor que desees. Por ejemplo, si estableces START WITH 100, la secuencia comenzará a partir del número 100.
- MAXVALUE: Con esta opción, puedes establecer el valor máximo permitido para la secuencia. Por defecto, la secuencia no tiene un valor máximo especificado, lo que significa que puede continuar generando números sin límites. Sin embargo, tienes la opción de establecer un límite máximo ajustado a tus necesidades. Por ejemplo, si utilizas MAXVALUE 1000, la secuencia se detendrá después de generar el número 1000.
- MINVALUE: Utiliza esta opción para establecer el valor mínimo permitido para la secuencia. Por defecto, no se especifica un valor mínimo, pero tienes la opción de establecerlo según tus requisitos. Por ejemplo, si utilizas MINVALUE 1, la secuencia no generará números más pequeños que 1.
- CYCLE: Si deseas que la secuencia se repita desde el número de inicio después de alcanzar el valor máximo, puedes utilizar esta opción. Por ejemplo, si utilizas CYCLE, la secuencia volverá a comenzar desde el número de inicio después de generar el valor máximo. Si no deseas permitir la repetición de la secuencia, puedes utilizar la opción NOCYCLE.
- CACHE: Esta opción te permite especificar la cantidad de valores que se deben almacenar en memoria para un acceso rápido. Por defecto, la secuencia no utiliza almacenamiento en caché. Sin embargo, al establecer un valor para CACHE, puedes mejorar el rendimiento al generar los números de secuencia. Por ejemplo, si utilizas CACHE 20, se almacenarán 20 valores en memoria.
- ORDER: Si deseas que los números de la secuencia se generen en orden de solicitud, puedes utilizar esta opción. Con ORDER garantizas la generación secuencial de los números. Sin embargo, si la generación secuencial no es un requisito para ti, puedes utilizar la opción NOORDER para una generación más rápida sin garantía de orden.
Recuerda que puedes combinar estas opciones y personalizar la configuración de tu secuencia según tus necesidades específicas.
Ejemplos de uso de secuencias en Oracle
A continuación, te mostraré algunos ejemplos prácticos de cómo utilizar las secuencias en Oracle:
Ejemplo 1: Generar números de secuencia
Supongamos que necesitamos generar números de secuencia únicos para identificar las órdenes de compra en una tabla llamada «ordenes_compra». Podemos utilizar una secuencia llamada «seq_ordenes_compra» para esto.
CREATE SEQUENCE seq_ordenes_compra INCREMENT BY 1 START WITH 1 NO MAXVALUE NO MINVALUE NOCACHE NOORDER;
Luego, al momento de insertar una nueva orden de compra en la tabla, podemos obtener el próximo número de secuencia utilizando la función NEXTVAL:
INSERT INTO ordenes_compra (id_orden, fecha) VALUES (seq_ordenes_compra.NEXTVAL, SYSDATE);
De esta manera, cada vez que insertemos una nueva orden de compra, el número de secuencia se incrementará automáticamente.
Ejemplo 2: Asociar una secuencia a una tabla
Supongamos que tenemos una tabla llamada «empleados» y queremos que la columna «id_empleado» se genere automáticamente utilizando una secuencia.
CREATE SEQUENCE seq_empleados INCREMENT BY 1 START WITH 1 NO MAXVALUE NO MINVALUE NOCACHE NOORDER;
Luego, utilizamos la sentencia ALTER TABLE para asociar la secuencia a la columna «id_empleado» de la tabla «empleados»:
ALTER TABLE empleados MODIFY id_empleado DEFAULT seq_empleados.NEXTVAL;
Con esta configuración, cada vez que insertemos una nueva fila en la tabla «empleados» sin especificar un valor para la columna «id_empleado», se generará automáticamente un nuevo número de secuencia.
Estos ejemplos ilustran cómo puedes utilizar las secuencias en Oracle para generar números de secuencia y asociarlos a tablas en el momento de inserción.
Asociación de una secuencia a una tabla
Cuando trabajas con secuencias en Oracle, tienes la opción de asociar una secuencia a una tabla para que los valores de la secuencia se generen automáticamente al momento de insertar filas en la tabla. Esta asociación se realiza mediante el uso de una columna de tipo IDENTITY.
Para asociar una secuencia a una tabla, puedes utilizar la siguiente sintaxis:
CREATE TABLE nombre_tabla ( id_columna NUMBER GENERATED ALWAYS AS IDENTITY (START WITH valor_inicio INCREMENT BY valor_incremento), columna1 datatype1, columna2 datatype2, ... );
En este ejemplo, el nombre de la secuencia no se especifica explícitamente en la sentencia, ya que Oracle generará automáticamente un nombre para la secuencia asociada. La columna «id_columna» será la columna asociada a la secuencia.
A continuación, te explico los diferentes elementos de la sintaxis:
- NUMBER: Indica el tipo de datos de la columna «id_columna». Puedes utilizar el tipo de datos adecuado según tus necesidades.
- GENERATED ALWAYS AS IDENTITY: Especifica que la columna «id_columna» utilizará una secuencia generada automáticamente.
- START WITH: Permite definir el número de inicio de la secuencia asociada.
- INCREMENT BY: Establece el valor de incremento entre los números de la secuencia asociada.
- columna1, columna2, …: Son las columnas adicionales de la tabla.
Con esta configuración, cada vez que insertes una fila en la tabla y no proporciones un valor para la columna «id_columna», Oracle generará automáticamente un nuevo número de secuencia utilizando la secuencia asociada. Esto te permite generar identificadores únicos y secuenciales de manera eficiente.
Ten en cuenta que esta forma de asociar una secuencia a una tabla utilizando una columna de tipo IDENTITY es una alternativa a la sentencia CREATE SEQUENCE. Ambos métodos tienen su utilidad según el contexto y los requerimientos del proyecto.
Alternativa: Uso de la columna de identidad
Otra alternativa que puedes utilizar en Oracle en lugar de la sentencia CREATE SEQUENCE es el uso de una columna de identidad. Una columna de identidad te permite generar automáticamente valores únicos y secuenciales para una columna específica en una tabla.
Para utilizar una columna de identidad, debes definirla al crear la tabla de la siguiente manera:
CREATE TABLE nombre_tabla ( id_columna NUMBER GENERATED ALWAYS AS IDENTITY, columna1 datatype1, columna2 datatype2, ... );
En este ejemplo, la columna «id_columna» se define como NUMBER GENERATED ALWAYS AS IDENTITY, lo que indica que se generará automáticamente un valor único y secuencial para cada fila insertada en la tabla.
Al utilizar esta columna de identidad, no es necesario crear sequence una secuencia explícita ni asociarla a la tabla. Oracle se encargará automáticamente de generar los valores de la columna «id_columna» de manera secuencial.
Es importante recordar que cuando utilizas una columna de identidad, no puedes modificar ni insertar valores explícitos en dicha columna durante las operaciones de inserción o actualización. Oracle manejará automáticamente la generación de los valores de la columna de identidad.
Recuerda considerar tus requisitos específicos al elegir entre el uso de una columna de identidad o una create sequence oracle. Ambas opciones ofrecen funcionalidades similares para generar valores únicos y secuenciales en Oracle, pero pueden tener diferencias en términos de flexibilidad y control.