在创建序列的语法中,有一个子句为 cache,它的用处是缓存指定个数的序列值。比如你设置的 cache 是20,那么在获取 nextval 时,Oracle 会直接从 cache 中取下一个序列值,如果 cache 中缓存的序列值没有了(比如 cache 中的序列值用完了,或者被手工清空了),那么 Oracle 会再次产生20个序列值,并放置 cache 中供使用,这样有助于提高序列值的获取速度。
-------------------------------
下面为测试:
01.SQL> select * from v$version;
02.
03.BANNER
04.----------------------------------------------------------------
05.Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
06.PL/SQL Release 10.2.0.1.0 - Production
07.CORE 10.2.0.1.0 Production
08.TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
09.NLSRTL Version 10.2.0.1.0 - Production
10.
11.SQL> create sequence SEQ_TEST1
12. 2 minvalue 1
13. 3 maxvalue 1000
14. 4 start with 1
15. 5 increment by 1
16. 6 cache 20
17. 7 order;
18.
19.序列已创建。
20.
21./*这里需要注意的是用dual得到的是一个值,但是用USER_SEQUENCES得到的是cache里的缓存的序列集合*/
22.-- //刚刚创建的序列必须先用 nextval 来获取一个初始值
23.SQL> select SEQ_TEST1.currval from dual;
24.select SEQ_TEST1.currval from dual
25. *
26.ERROR 位于第 1 行:
27.ORA-08002: 序列 SEQ_TEST1.CURRVAL 尚未在此会话中定义
28.
29.
30.SQL> select SEQ_TEST1.nextval from dual;
31.
32. NEXTVAL
33.----------
34. 1
35.
36.SQL> select SEQ_TEST1.currval from dual;
37.
38. CURRVAL
39.----------
40. 1
41.
42.-- //清空 cache 中缓存的序列值
43.SQL> alter system flush shared_pool;
44.
45.系统已更改。
46.
47.-- //查询当前值,没有变化,仍是1
48.SQL> select SEQ_TEST1.currval from dual;
49.
50. CURRVAL
51.----------
52. 1
53.
54.-- //查询下一个值:Oracle 发现 cache 中的序列值没有了,会再次产生20个序列值供使用。
55.-- //所以这里得到的结果不是2,而是21。
56.SQL> select SEQ_TEST1.nextval from dual;
57.
58. NEXTVAL
59.----------
60. 21
61.
62.-- 再试一次
63.SQL> alter system flush shared_pool;
64.
65.系统已更改。
66.
67.SQL> select SEQ_TEST1.currval from dual;
68.
69. CURRVAL
70.----------
71. 21
72.
73.SQL> select SEQ_TEST1.nextval from dual;
74.
75. NEXTVAL
76.----------
77. 41
78.
79.-- //问题:Oracle 下一次取的20个值是从哪里开始计算的呢,是 currval + 20,
80.-- //还是每个 cache + 20 呢?我们试验一下。
81.SQL> select SEQ_TEST1.nextval from dual;
82.
83. NEXTVAL
84.----------
85. 42
86.
87.-- //现在序列的当前值是42。如果是用 currval + 20 来计算,那么清空 cache 后,
88.-- //获得的 nextval 应该是62;如果是 cache + 20,那应该是 61。
89.-- //看看实验结果吧:
90.SQL> alter system flush shared_pool;
91.
92.系统已更改。
93.
94.SQL> select SEQ_TEST1.currval from dual;
95.
96. CURRVAL
97.----------
98. 42
99.
100.SQL> select SEQ_TEST1.nextval from dual;
101.
102. NEXTVAL
103.----------
104. 61
分享到:
相关推荐
CACHE 10; 只要定义了emp_sequence,你就可以用使CURRVAL,NEXTVAL CURRVAL=返回 sequence的当前值 NEXTVAL=增加sequence的值,然后返回 sequence 值 例如: emp_sequence.CURRVAL emp_sequence.NEXTVAL ...
Sequence to Sequence Learning with Neural Networksv论文PDF版
机器学习之sequence to sequence learning。(Sequence Generation-----Hung-yi Lee 李宏毅.ppt)
SequenceDiagram-3.0.5.zip
Edward Grefenstette - Beyond Sequence to Sequence with Augmented RNNs
A method for assembly sequence planning is proposed in this paper. First, two methods for assembly sequence planning are compared, which are indirect method and direct method. Then, the limits of the ...
基于循环神经网络和注意力机制的Sequence-to-Sequence模型神经网络方法在信息抽取和自动摘要生成方面发挥了重要作用。然而,该方法不能充分利用文本的语言特征信息,且生成结果中存在未登录词问题,从而影响文本摘要...
在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环....
sequence-to-sequence-learning-with-neural-networks.
Sequence Diagrams of UML
memory networks, are extremely appealing for sequence-tosequence learning tasks. Despite their great success, they typically suffer from a fundamental shortcoming: they are prone to generate ...
oracle中sequence介绍及应用
sequence-diagram-js 所需jar包,其中sequence-diagram-js支持自定义颜色
sequence.txt
invalid multibyte character sequence 870告警1
字体,圈码类。适用于加圈脚注各用书稿论文文档排版。
搜狐2017笔试题一:Kolakoski sequence完整源代码
DNASequence.java ssd