nextval 和 currval

来源:互联网 发布:录视频软件下载 编辑:程序博客网 时间:2024/05/21 10:50

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
阅读全文
2 0
原创粉丝点击