47

这是什么意思,我该如何解决?

SELECT MySequence.CURRVAL FROM DUAL;

结果:

ORA-08002: 序列 MySequence.CURRVAL 尚未在此会话中定义

4

5 回答 5

60

mysequence.CURRVAL 返回从会话中的序列 mysequence 获得的最新值,因此直到在会话中至少使用一次 mysequence.NEXTVAL 获得一个值后才定义。CURRVAL 的目的是让您在代码中多次使用序列值,例如

insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);

insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);

如果 CURRVAL 只是返回任何会话从序列中获取的最后一个值,那么在上面的代码中它是没有用的,实际上可能导致数据损坏!

于 2009-05-01T10:35:13.487 回答
28

事实证明,在会话中至少使用一次 NEXTVAL 之前,您不能使用 CURRVAL。

于 2009-04-30T21:44:30.843 回答
17

用这个

select sequence_name, 
   to_char(min_value) min_value,
   to_char(max_value) max_value, 
   increment_by,
   cycle_flag, 
   order_flag, 
   cache_size, 
   to_char(Last_number) last_number
from user_sequences
where sequence_name='MYSEQUENCE'
于 2010-03-04T21:50:07.857 回答
3

道格,

真正的问题是,当您在会话中没有使用 nextval 时,为什么需要 currval?您可以查看 USER/ALL/DBA_SEQUENCES 视图的 LAST_NUMBER 列,但是当您开始使用它时要考虑并发问题。

问候,罗布。

于 2009-05-01T07:34:25.730 回答
2
select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';

在上面的查询中,SEQ_V_WORKORDER_RECNO我的序列名称将其替换为您的序列名称

于 2014-02-05T06:08:48.750 回答