Labels

Secuencias en Oracle

Las secuencias sirven para infomar el valor de una clave primaria

CREAR UNA SECUENCIA

Create sequence.....
start with n
increment by n
maxvalue n / nomaxvalue
cycle / nocycle

MODIFICAR LA SECUENCIA

Alter sequence .....
increment by n
maxvalue n / nomaxvalue
cycle / nocycle


No podemos cambiar el valor de inicio cuando queremos cambiar la secuencia

Ejemplo, sentencia para crear una secuencia:

SQL> create sequence seqTabA
2 start with 1
3 increment by 1
4 maxvalue 20000
5 nocycle;

Sequence created.

SQL> desc user_sequences

Name Null? Type
----------------------------------- -------- ----------------------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
Aqui podemos ver la secuencia creada:

SQL> select sequence_name, last_number from user_sequences;

SEQUENCE_NAME LAST_NUMBER
------------------------------ -----------
SEQTABA 1

UTILIZAR SECUENCIAS:

NEXTVAL -------------> Siguiente numero en la secuencia
CURRVAL -------------> Ultimo numero generado

SQL> select seqtaba.nextval from dual;

NEXTVAL
----------
1

SQL> select seqtaba.currval from dual;

CURRVAL
----------
1

SQL> select seqtaba.nextval from dual;

NEXTVAL
----------
2

SQL> insert into tablaEj values (seqtaba.nextval, 'aaa');

1 row created.

SQL> insert into tablaEj values (seqtaba.nextval, 'aaa');

1 row created.

SQL> insert into tablaEj values (seqtaba.nextval, 'aaa');

1 row created.

SQL> select * from tablaEj;

ID VALOR
---------- ----------------------------------------
3 aaa
4 aaa
5 aaa

SQL> insert into tablaEj values (0, 'aaa');

1 row created.

SQL> update tablaEj set id= seqtaba.nextval where id=0;

1 row updated.

SQL> select * from tablaEj;

ID VALOR
---------- ----------------------------------------
3 aaa
4 aaa
5 aaa
6 aaa

DONDE SE PUEDE USAR UNA SECUENCIA:

- Clausula VALUES de la instruccion INSERT
- Clausula SET de la instruccion UPDATE
- Clausula SELECT de la instruccion SELECT

DONDE NO SE PUEDE USAR

- Clausulas DISTINCT, GROUP BY, ORDER BY, WHERE de la instruccion SELECT
- Valor por defecto de una columna

CACHE DE SECUENCIAS

SQL> alter sequence seqtaba
cache 50;

Sequence altered.

SI UTILIZAMOS CACHE NO SE GARANTIZA LA EQUIDISTANCIA ENTRE NUMERO DE LA SECUENCIA.

Esto quiere decir que supongamos que se hace un pedido de secuencia y el objeto secuencia guarda en cache 50 numeros y vamos por el nro 18 y por algun motivo se baja la instancia de la base de datos, al volver a estar arriba el obj vuelve a solicitar 50 numeros a la cache y para el proximo nro
a ser usado en vez de ser el 19, seria el 51, entonces nos estariamos saltando todos esos numeros.

Bueno hasta aqui lo básico sobre secuencias, espero les sea de utilidad.

Licencia Creative Commons
Secuencias en Oracle por Clarisa Maman Orfali se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.

1 comentario:

Sara dijo...

En que casos usar con cache size o sin cache size?

Gracias.

Publicar un comentario en la entrada