nextval 和 currval

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值