这意味着什么,我该如何解决它?
SELECT MySequence.CURRVAL FROM DUAL;
结果:
ORA-08002:此会话中尚未定义序列MySequence.CURRVAL
答案 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
中,我的序列名称将替换为您的序列名称