序列初始化过了,但每次currval都要先nextval,为何?

序列已经初始化过了,但每次要得到seq.currval都要先nextval,为何?

我定义了一个序列,从1开始计数的,已经运行过select ...nextval from dual了。
CREATE SEQUENCE seq_v4u;
select seq_v4u.nextval from dual;

但是我发现每个session要使用currval之前还是要求输入一个select nextval....这是为什么呢?

SQL> select seq_v4u.currval from dual;
select seq_v4u.currval from dual
*
ERROR at line 1:
ORA-08002: sequence SEQ_V4U.CURRVAL is not yet defined in this session


SQL> select seq_v4u.nextval from dual;

   NEXTVAL
----------
        43

SQL> select seq_v4u.currval from dual;

   CURRVAL
----------
        43

unix下查看刚才那个错误:
> oerr ora 8002
08002, 00000, "sequence %s.CURRVAL is not yet defined in this session"
// *Cause: sequence CURRVAL has been selected before sequence NEXTVAL
// *Action: select NEXTVAL from the sequence before selecting CURRVAL


奇怪了,为何每个新的session都需要我选一次nextval? 这样的话我得到的currval不是我需要的值啊!

请指点!!!!

 

最佳答案renxiao2003
在使用CURRVAL之前必须先使用NEXTVAL


ORACLE的序列规范就是这么定义的,呵呵!:-)
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值