大家可能还记得ORACLE临时表有两种类型:会话级的临时表和事务级的临时表,对应的关键字分别是ON COMMIT DELETE ROWS和ON COMMIT PRESERVE ROWS。其中,
ON COMMIT PRESERVE ROWS表示临时表的内容可以跨事务而存在,不过,当该会话结束时,临时表的暂时段将随着会话的结束而被丢弃,临时表中的数据自然也就随之丢弃。
今天和大家分享一个Sequence在Oracle 12c下的新特性,和临时表有点类似,支持Session特性。也就是说,在不同的会话中同一序列对象互不影响,各自计数。
1.创建一个普通序列和一个session序列
-
SQL> select banner from v$version;
-
-
BANNER
-
--------------------------------------------------------------------------------
-
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
-
PL/SQL Release 12.1.0.2.0 - Production
-
CORE 12.1.0.2.0 Production
-
TNS for Linux: Version 12.1.0.2.0 - Production
-
NLSRTL Version 12.1.0.2.0 - Production
-
-
SQL>
-
SQL> show user
-
USER is "HOEGH"
-
SQL>
-
SQL> create sequence HOEGH1
-
2 start with 1
-
3 increment by 1;
-
-
Sequence created.
-
-
SQL>
-
SQL> create sequence HOEGH2
-
2 start with 1
-
3 increment by 1
-
4 session;
-
-
Sequence created.
-
-
SQL>
2.查看两个序列的NEXTVAL
通过NEXTVAL查看两个序列的值,分别执行两次,我们看到输出结果没有差别。
-
SQL>
-
SQL> select HOEGH1.NEXTVAL from dual;
-
-
NEXTVAL
-
----------
-
1
-
-
SQL> /
-
-
NEXTVAL
-
----------
-
2
-
-
SQL>
-
SQL> select HOEGH2.NEXTVAL from dual;
-
-
NEXTVAL
-
----------
-
1
-
-
SQL> /
-
-
NEXTVAL
-
----------
-
2
-
-
SQL>
3.打开一个新的session,查看两个序列的NEXTVAL
接下来,我们打开一个新的会话。
通过NEXTVAL查看两个序列的值,分别执行两次,我们看到输出结果出现了差异。
拥有session特性的序列HOEGH2重新从1开始计数,而普通序列HOEGH1则是接着上次的序列值继续计数。
-
SQL> sho user
-
USER is "HOEGH"
-
SQL>
-
SQL> select HOEGH1.NEXTVAL from dual;
-
-
NEXTVAL
-
----------
-
3
-
-
SQL> /
-
-
NEXTVAL
-
----------
-
4
-
-
SQL>
-
SQL> select HOEGH2.NEXTVAL from dual;
-
-
NEXTVAL
-
----------
-
1
-
-
SQL> /
-
-
NEXTVAL
-
----------
-
2
-
-
SQL>
~~~~~~~ the end~~~~~~~~~
hoegh
2016.09.08
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30162081/viewspace-2124687/
,如需转载,请注明出处,否则将追究法律责任。