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