Вы находитесь на странице: 1из 18

SECUENCIAS

BASE DE DATOS II

SINTAXIS GENERAL

Una secuencia (sequence) se emplea para


generar valores enteros secuenciales nicos y
asignrselos a campos numricos; se utilizan
generalmente para las claves primarias de las
tablas garantizando que sus valores no se repitan.

Una secuencia es una tabla con un campo


numrico en el cual se almacena un valor y cada
vez que se consulta, se incrementa tal valor para
la prxima consulta.

SINTAXIS GENERAL

Sintaxis general:

create sequence NOMBRESECUENCIA


start with VALORENTERO
increment by VALORENTERO
maxvalue VALORENTERO
minvalue VALORENTERO
cycle | nocycle;
La clusula "start with" indica el valor desde el
cual comenzar la generacin de nmeros
secuenciales. Si no se especifica, se inicia con el
valor que indique "minvalue".

SINTAXIS GENERAL

La clusula "increment by" especifica el incremento, es


decir, la diferencia entre los nmeros de la secuencia; debe
ser un valor numrico entero positivo o negativo diferente
de 0. Si no se indica, por defecto es 1.
maxvalue" define el valor mximo para la secuencia. Si se
omite, por defecto es 99999999999999999999999999.
"minvalue" establece el valor mnimo de la secuencia. Si se
omite ser 1.
La clusula "cycle" indica que, cuando la secuencia llegue a
mximo valor (valor de "maxvalue") se reinicie,
comenzando con el mnimo valor ("minvalue") nuevamente,
es decir, la secuencia vuelve a utilizar los nmeros. Si se
omite, por defecto la secuencia se crea "nocycle".

Si no se especifica ninguna clusula, excepto el nombre de


la secuencia, por defecto, comenzar en 1, se incrementar
en 1, el mnimo valor ser 1, el mximo ser
999999999999999999999999999 y "nocycle".
En el siguiente ejemplo creamos una secuencia llamada
"sec_codigolibros", estableciendo que comience en 1, sus
valores estn entre 1 y 99999 y se incrementen en 1, por
defecto, ser "nocycle":

create sequence sec_codigolibros


start with 1
increment by 1
maxvalue 99999
minvalue 1;

Si
bien,
las
secuencias
son
independientes de las tablas, se utilizarn
generalmente para una tabla especfica,
por lo tanto, es conveniente darle un
nombre que referencie a la misma.
Otro ejemplo:

create sequence sec_numerosocios


increment by 5
cycle;

La
secuencia
anterior,
"sec_numerosocios", incrementa sus
valores en 5 y al llegar al mximo valor
recomenzar la secuencia desde el valor
mnimo; no se especifican las otras
clusulas, por lo tanto, por defecto, el
valor mnimo es 1, el mximo
999999999999999999999999999 y el
valor inicial es 1.

Las secuencias son tablas; por lo tanto se accede


a ellas mediante consultas, empleando "select".
La diferencia es que se utiliza pseudocolumnas
para recuperar el valor actual y el siguiente de la
secuencia.
Estas
pseudocolumnas
pueden
incluirse en el "from" de una consulta a otra tabla
o de la tabla "dual".

Para recuperar los valores de una secuencia se


emplea las pseudocolumnas "currval" y "nextval".

Primero debe inicializarse la secuencia con


"nextval". La primera vez que se referencia
"nextval" retorna el valor de inicio de la secuencia;
las siguientes veces, incrementa la secuencia y
retorna el nuevo valor:

NOMBRESECUENCIA.NEXTVAL;

se coloca el nombre de la secuencia seguido de un


punto y la pseudocolumna "nextval" (que es una
forma abreviada de "next value", siguiente valor).

Acceso

Para recuperar el valor actual de una secuencia


se usa:

NOMBRESECUENCIA.CURRVAL;

es decir, el nombre de la secuencia, un punto y


la pseudocolumna "currval" (que es una forma
abreviada de "current value", valor actual).

Los valores retornados por "currval" y "nextval"


pueden usarse en sentencias "insert" y "update".

Ejemplo:

Creamos una secuencia para el cdigo de la


tabla "libros", especificando el valor mximo,
el incremento y que no sea circular:

create sequence sec_codigolibros


maxvalue 999999
increment by 1
nocycle;

Ejemplo
Luego se inicializa la secuencia

select sec_codigolibros.nextval from dual;

Se
Ingresa
un
registro
en
"libros",
almacenando en el campo "codigo" el valor
actual de la secuencia:

insert into libros values


(sec_codigolibros.currval,'El
'Borges','Emece');

aleph',

Se Ingresa otro registro en "libros", almacenando


en el campo "codigo" el valor siguiente de la
secuencia:

insert into libros values


(sec_codigolibros.nextval,'Matematica estas ahi',
'Paenza','Nuevo siglo');

Para ver todas las secuencias de la base de datos


actual realizamos la siguiente consulta:

select *from all_sequences;

Secuencias

Nos muestra el propietario de la secuencia, el nombre


de la misma, los valores mnimo y mximo, el valor de
incremento y si es circular o no.

Tambin podemos ver todos los objetos de la base de


datos actual tipeando;

select *from all_objects;

En la tabla resultado aparecen todos los objetos de la


base de datos, incluidas las secuencias; si es una
secuencia en la columna OBJECT_TYPE se muestra
"SEQUENCE".

Podemos consultar "all_objects" especificando


que nos muestre el nombre de todas las
secuencias:

select object_name from all_objects


where object_type='SEQUENCE';

Para eliminar una secuencia


"drop sequence". Sintaxis:

empleamos

drop sequence NOMBRESECUENCIA;

Alterar secuencia (alter


sequence)

Es posible modificar una secuencia, su valor


de incremento, los valores mnimo y mximo y
el atributo "cycle" (el valor de inicio no puede
modificarse);
para
ello
empleamos
la
sentencia "alter sequence". Sintaxis:

alter
sequence
ATRIBUTOSAMODIFICAR;

NOMBRESECUENCIA

Definimos
una
secuencia
denominada
"sec_codigolibros" con los siguientes atributos:

create sequence sec_codigolibros


start with 1
increment by 1
maxvalue 999
minvalue 1
nocycle;
Para modificar el mximo valor a
99999 y el incremento a 2, tipeamos:

alter sequence sec_codigolibros


increment by 2
maxvalue 99999;

Los valores de incremento y mximo


han sido modificados, los dems
atributos no especificados en la
sentencia
"alter
sequence"
se
mantienen.

Вам также может понравиться