Cómo utilizar las secuencias de Oracle para simular el tipo de datos autoincremento de otros motores de bases de datos (Access, MySQL, Paradox, DBase, etc). Incluye ejemplos en SQL utilizando el comando create sequence.
Mediante las secuencias, Oracle puede proporcionar una lista consecutiva de números unívocos que sirve para simplificar las tareas de programación. La primera vez que una consulta llama a una secuencia, se devuelve un valor predeterminado. En las sucesivas consultas se obtendrá un valor incrementado según el tipo de incremento especificado. Las secuencias pueden ser útiles, por ejemplo, para simular el tipo de datos AUTOINCREMENTO de Paradox, Access y MySQL.
Para crear una secuencia en Oracle mediante SQL utilizaremos el comando create sequence con la siguiente sintaxis:
1 2 3 4 5 6 7 |
CREATE SEQUENCE nombre_secuencia INCREMENT BY numero_incremento START WITH numero_por_el_que_empezara MAXVALUE valor_maximo | NOMAXVALUE MINVALUE valor_minimo | NOMINVALUE CYCLE | NOCYCLE ORDER | NOORDER |
Por ejemplo, si queremos crear una secuencia que empiece en 100 y se incremente de uno en uno utilizaremos la siguiente consulta SQL:
1 2 3 |
CREATE SEQUENCE incremento_id_cliente INCREMENT BY 1 START WITH 100 |
Para utilizar la secuencia, en primer lugar, crearemos una tabla de prueba (para insertar un registro y comprobar que la secuencia anterior funciona correctamente):
1 2 3 4 5 |
create table clientes ( codigo number not null primary key, nombre varchar2(100) unique not null, cif varchar2(15) unique, fechaalta date) |
Para utilizar la secuencia creada en una inserción de fila:
1 2 3 4 5 |
insert into clientes values ( incremento_id_cliente.NextVal, 'ProyectoA', '11225522F', sysdate) |
Realizamos otra inserción para comprobar que el incremento es de 1:
1 2 3 4 5 |
insert into clientes values ( incremento_id_cliente.NextVal, 'Otro cliente', '00000G', sysdate) |
Como se puede observar en el ejemplo anterior, para obtener el siguiente valor de la secuencia almacenada se utiliza el comando: nombre_secuencia.NextVal.
Para comprobar que la secuencia ha funcionado en los inserts anteriores hacemos un SELECT a la tabla «clientes»:
1 2 |
select * from clientes |
El resultado de este SELECT debe ser de dos registro con «codigo» 100 y 101:
Ejemplo de creación de una secuencia cíclica (cuando llegue al valor máximo empezará por el valor inicial)
1 2 3 4 5 |
CREATE SEQUENCE incremento_ciclico INCREMENT BY 1 START WITH 10 MAXVALUE 30 CYCLE |
Creamos una tabla para las pruebas:
1 2 3 4 |
create table prueba_ciclo ( codigo number not null primary key, ciclo number not null, fechaalta date) |
Ahora realizamos la inserción de más de 20 filas para comprobar que la secuencia cíclica funciona:
1 2 3 4 |
insert into prueba_ciclo values ( incremento_id_cliente.NextVal, incremento_ciclico.NextVal, sysdate) |
Como se puede observar en el ejemplo anterior hemos utilizados dos secuencias «incremento_id_cliente» y «incremento_ciclico».
Para comprobar que el ciclo funciona realizamos un SELECT sobre la tabla «prueba_ciclo»:
1 2 |
select * from prueba_ciclo |
Para crear una secuencia decremental el parámetro INCREMENT BY tendrá valor -1 y el parámetro START WITH coincidirá con el parámetro MAXVALUE:
1 2 3 |
CREATE SEQUENCE secuencia_decremental INCREMENT BY -1 START WITH 100 MAXVALUE 100 |
Para hacer la prueba crearemos la tabla «prueba_decremental»:
1 |
create table prueba_decremental (numero number, fecha date) |
Ahora insertaremos unas cuantas filas para comprobar que la secuencia funciona correctamente:
1 |
insert into prueba_decremental values (secuencia_decremental.NextVal, sysdate) |
Haremos un SELECT para comprobar que la secuencia es decremental:
1 |
select * from prueba_decremental |