Oracle中nextval和currval到底有什么区别呢?
身为小白的我斗胆为大家分享下我的理解,^_^,如有错误或不足,请各位多多指点
一般nextval和currval用于序列sequence中,
-通过nextval和currval进行调用
nextval:每次获得不同的sequence值,根据increment(增量),序列值增加
currval:获得当前指向的sequence值(只执行currval的话,不会因执行次数而改变)
举例说明:
左图为第一会话,右图为第二会话
打开第一会话,执行nextval,值为初始值394
打开第二会话,执行nextval,值增长了increment量(12),为406
回到第一会话,执行currval,值仍为394,并没有因为在第二会话执行了nextval而改变,因为currval是获得当前指向的序列值。[ 而且此时在会话一中,不管执行多少次currval,值都为394 ]
在第一会话执行nextval,值增长12
总结:
nextval每执行一次,sequence值就会根据increment增量增长,不管使用者是谁 [ 这里指会话不一样 ];
而currval则是获得当前指向的sequence值 [ 也就是和本身会话的值一样 ]
e.g.
在Oracle中,用以下SQL命令创建了一个序列:
CREATE SEQUENCE my_seq
START WITH 394
INCREMENT BY 12
NOMINVALUE
NOMAXVALUE
NOCYCLE
NOCACHE;
用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含 my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是 ( B )
A. 406
B. 418
C. 430
D. 442
E. 242
解析:
像这道题,执行包含my_seq.NEXTVAL的SQL语句三次,一次次来,
第一次:sequence值为初始值394;
第二次:sequence值增长increment(12),为406;
第三次:sequence值增长increment(12),为418;
然后执行包含 my_seq.CURRVAL的SQL语句四次,
首先光执行currval,不管多少次,值不变
currval获得当前指向的sequence值,为418,
所以选 B