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

Dou*_*oug 37 oracle sequence

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

SELECT MySequence.CURRVAL FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

结果:

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

Ton*_*ews 49

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

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

insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
Run Code Online (Sandbox Code Playgroud)

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


Dou*_*oug 25

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


小智 14

用这个

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'
Run Code Online (Sandbox Code Playgroud)