Pular para o conteúdo

Session Level Sequences no Oracle Database: Produzindo valores únicos dentro de uma sessão

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
SQL> CREATE SEQUENCE sequence_teste
  START WITH   1
  INCREMENT BY 1
  SESSION

Sequence created.</span>

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</span>
----------- -------------------- -------------------------
         1 Joao                 Silva
         2 Andre                Silva
         3 Pedro                Silva
         4 Mario                Silva
         5 Fulano               Silva

Em outra sessão:

SQL
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
SQL> ALTER SEQUENCEGLOBAL;

SQL> ALTER SEQUENCESESSION;

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

Alex Zaballa

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress