Sei sulla pagina 1di 6

Contenido

Secuencias (create sequence - currval - nextval - drop sequence) .....................................................2


Alterar secuencia (alter sequence) .....................................................................................................6

Secuencias (create sequence - currval - nextval - drop


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

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".
- 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.
Dijimos que las secuencias son tablas; por lo tanto se accede a ellas mediante consultas,
empleando "select". La diferencia es que utilizamos 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 empleamos 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 nos
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).
Para recuperar el valor actual de una secuencia usamos:

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".
Veamos un ejemplo completo:
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;
Luego inicializamos la secuencia

select sec_codigolibros.nextval from dual;


Recuerde que la primera vez que se referencie la secuencia debe emplearse "nextval" para
inicializarla.
Ingresamos un registro en "libros", almacenando en el campo "codigo" el valor actual de la
secuencia:

insert into libros values


(sec_codigolibros.currval,'El aleph', 'Borges','Emece');
Ingresamos 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;


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, entre otros datos que no analizaremos por el
momento.

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 empleamos "drop sequence". Sintaxis:

drop sequence NOMBRESECUENCIA;


Si la secuencia no existe aparecer un mensaje indicando tal situacin.
En el siguiente ejemplo se elimina la secuencia "sec_codigolibros":

drop sequence sec_codigolibros;

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 NOMBRESECUENCIA ATRIBUTOSAMODIFICAR;


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 mnimo han sido modificados, los dems atributos no especificados
en la sentencia "alter sequence" se mantienen.

Potrebbero piacerti anche