Translate
domingo, 17 de julio de 2016
Que es una Sequence en Oracle?
En mysql tenemos los valores autoincrementales, que están muy buenos pero siendo realistas tenemos poco control de la secuencia que llena el valor autoincremental.
En oracle en cambio tenemos objetos secuencia que nos permiten tener más control de los valores autoincrementales. Ojo! la secuencia es un objeto independiente del campo que deba llenar. Es decir podemos tener una secuencia para todos nuestros campos autoincrementales o una secuencia para cada uno de ellos. Como ven, tenemos mucha más libertad.
Como creo una secuencia? Asì:
Aja... claro! Mejor veamos un ejemplo, no?
CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
Con estas sentencias estamos creando una secuencia que comienza en 1000 y va de 1 en 1.
Ahora bien, como la usamos?
por ejemplo con el metodo nextval podemos acceder al proximo valor.
Select customers_seq.NEXTVAL from dual;
Por lo tanto podemos utilizarla en un insert:
INSERT INTO customers_tab (id, name)
VALUES (customers_seq.NEXTVAL, 'Acme');
También podemos saber el valor actual con CURRVAL
INSERT INTO Line_items_tab (Orderno, Partno, Quantity)
VALUES (Order_seq.CURRVAL, 29374, 1);
Ojo al piojo, se puede usar CURRVAL solo luego de ejecutar NEXTVAL, es decir si no ejecutaste NEXTVAL, CURRVAL va dar error.
Podemos alterar la secuencia, pero nunca reiniciarla. Para reiniciarla tenemos que eliminarla y crearla nuevamente.
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE
CACHE 20;
Dejo link: https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm