No Oracle Database 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 3 Pedro Silva 4 Mario Silva 5 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 2 Andre Silva 3 Pedro Silva 4 Mario Silva 5 Fulano Silva 6 Ciclano Silva 7 Beltrano Silva 8 Jose Silva 9 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
http://docs.oracle.com/cd/E16655_01/server.121/e17209/statements_6016.htm#SQLRF54343
http://docs.oracle.com/cd/E16655_01/server.121/e17640/manage_ps.htm#SBYDB5169
Abraço
Alex Zaballa, formado em Análise de Sistemas, é especialista em Banco de Dados Oracle com sólidos conhecimentos em Servidores de Aplicação e Sistemas Operacionais; trabalha com Oracle há 15 anos, é ORACLE ACE Director, certificado OCM Database 11G / Cloud e conta com mais de 140 outras certificações em produtos da Oracle. Alex também é um dos fundadores do Grupo de Usuários Oracle de Angola (GUOA), participa do Grupo de Usuários de Tecnologia Oracle Brasil (GUOB) e é membro do time OraWorld.