Tuesday, 14 November 2017

12c - Session Level Sequences



In Oracle Database 12c, a new feature was introduced the Session level sequences.

Session level sequences will be used to produce unique values within a session. Once the session ends, the sequence is reset.

They are very used to generate Primary Keys values ​​in Global Temporary Tables.


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


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


INSERT INTO Table_test (first_name, last_name)
SELECT first_name, last_name
FROM HR.EMPLOYEES
WHERE rownum <6
/
5 rows created.


SELECT *
FROM Table_test
/

EMPLOYEE_ID FIRST_NAME  LAST_NAME        
----------- -------------------- ------------------- ------
1 Joao  Silva 
2 Andre  Silva 
3  Pedro  Silva 
4  Mario  Silva 
5  Doe  Silva               
            
In another session:

INSERT INTO Table_test (first_name, last_name)
SELECT first_name, last_name
FROM HR.EMPLOYEES
WHERE rownum <10
/
9 rows created.


SELECT *
FROM Table_test
/

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

Cache parameters NOCACHE, ORDER or NOORDER level are ignored by SESSION sequences.


You can change existing sequences:

SQL> ALTER SEQUENCE ... GLOBAL;

SQL> ALTER SESSION ... SEQUENCE;

Session level sequences must be created in a read / write database

No comments: