Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Oracle: Secuencias en Oracle (para simular el autoincremento)
Bases de Datos


Este artículo muestra 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 utlizando el comando create sequence

SECUENCIAS EN ORACLE (PARA SIMULAR EL AUTOINCREMENTO)

CONCEPTO

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.

¿Cómo crear una secuencia mediante SQL?

Para crear una secuencia en Oracle mediante SQL utilizaremos el comando create sequence con la siguiente sintaxis:

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:

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):

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:

insert into clientes values (
incremento_id_cliente.NextVal,
'AjpdSoft',
'11225522F',
sysdate)

Realizamos otra inserción para comprobar que el incremento es de 1:

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":

select * from clientes

El resultado de este SELECT debe ser de dos registro con "codigo" 100 y 101:

AjpdSoft Administración BD

Ejemplo de creación de una secuencia cíclica (cuando llegue al valor máximo empezará por el valor inicial)

CREATE SEQUENCE incremento_ciclico
INCREMENT BY 1
START WITH 10
MAXVALUE 30
CYCLE

Creamos una tabla para las pruebas:

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:

insert into prueba_ciclo values (
incremento_id_cliente.NextVal,
incremento_ciclico.NextVal
,
sysdate)

Como se puede observar en el ejemplo anterior hemos utilzados dos secuencias "incremento_id_cliente" y "incremento_ciclico".

Para comprobar que el ciclo funciona realizamos un SELECT sobre la tabla "prueba_ciclo":

select * from prueba_ciclo

AjpdSoft Administración BD

Crear una secuencia decreciente

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:

CREATE SEQUENCE secuencia_decremental
INCREMENT BY -1
START WITH 100 MAXVALUE 100

Para hacer la prueba crearemos la tabla "prueba_decremental":

create table prueba_decremental (numero number, fecha date)

Ahora insertaremos unas cuantas filas para comprobar que la secuencia funciona correctamente:

insert into prueba_decremental values (secuencia_decremental.NextVal, sysdate)

Haremos un SELECT para comprobar que la secuencia es decremental:

select * from prueba_decremental

AjpdSoft Administración BD



Nota: Fuente: "Manual de referencia Oracle 9i" de los autores Kevin Loney y George Koch.
Anuncios


Enviado el Sábado, 10 septiembre a las 16:25:41 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A