12c - Session Level Sequences

No Oracle Datatbase 12c, foi introduzida uma nova funcionalidade, as Session level sequences.

Session level sequences são utilizadas para produzir valores únicos dentro de uma sessão. Assim que a sessão termina, a sequence é reinicializada.
Elas são muito utilizadas para gerar valores de Primary Keys em Global Temporary Tables.


SQL> CREATE SEQUENCE sequence_teste
START WITH 1
INCREMENT BY 1
SESSION
/
Sequence created.


CREATE GLOBAL TEMPORARY TABLE tabela_teste (
id NUMBER DEFAULT sequence_teste.nextval NOT NULL
,first_name VARCHAR2(20)
,last_name VARCHAR2(25)
)
ON COMMIT PRESERVE ROWS
/
Table created.


INSERT INTO tabela_teste (first_name, last_name)
SELECT first_name, last_name
FROM hr.employees
WHERE rownum < 6
/
5 rows created.


SELECT *
FROM tabela_teste
/

EMPLOYEE_ID FIRST_NAME 
          LAST_NAME
----------- -------------------- -------------------------
1           Joao 
                Silva
2           Andre 
               Silva
          Pedro                Silva
          Mario                Silva
          Fulano               Silva


Em outra sessão:

INSERT INTO tabela_teste (first_name, last_name)
SELECT first_name, last_name
FROM hr.employees
WHERE rownum < 10
/
9 rows created.


SELECT *
FROM tabela_teste
/

EMPLOYEE_ID FIRST_NAME           LAST_NAME
----------- -------------------- -------------------------
1           Joao                 Silva
          Andre                Silva
          Pedro                Silva
          Mario                Silva
          Fulano               Silva
          Ciclano              Silva
          Beltrano             Silva
          Jose                 Silva
          Alex                 Silva


Os parâmetros CACHE, NOCACHE, ORDER ou NOORDER são ignorados pelas SESSION level sequences.


Pode-se alterar sequences existentes:

SQL> ALTER SEQUENCE … GLOBAL;

SQL> ALTER SEQUENCE … SESSION;

Session level sequences devem ser criadas em um banco read/write e, podem ser acessadas em um banco read/write ou read/only (mesmo em um banco regular, aberto temporariamente como read/only).


Referências:



Abraço


Alex Zaballa

0 comentários: