序列已经初始化过了,但每次要得到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,其值就是不一样的。 |