12c – Session Level Sequences

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

Deixe um comentário

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detectado !

Verificamos que está usando alguma extensão para bloquear os anúncios. O GPO (Grupo de Profissionais Oracle) obtém a sua renda através dos anúncios, para assim manter toda a estrutura dedicada a universalização do conhecimento.

Se você gosta de nosso trabalho, pedimos por gentileza que desabilite o ads blocker. Trabalhamos somente com o Google Adsense e tentamos ao máximo exibir apenas o necessário.

Agradecemos de antemão ! :)

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock