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.
Secuencias en Oracle por Clarisa Maman Orfali se encuentra bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.
En que casos usar con cache size o sin cache size?
Gracias.