Oracle:此会话中尚未定义序列MySequence.currval

时间:2009-04-30 21:41:38

标签: oracle sequence

这意味着什么,我该如何解决它?

SELECT MySequence.CURRVAL FROM DUAL;

结果:

  

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

5 个答案:

答案 0 :(得分:48)

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

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

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

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

答案 1 :(得分:24)

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

答案 2 :(得分:13)

使用此

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'

答案 3 :(得分:3)

道格

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

此致 罗布。

答案 4 :(得分:2)

select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';

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