Oracle:sequence MySequence.currval尚未在此会话中定义

bvn4nwqk  于 2023-08-03  发布在  Oracle
关注(0)|答案(6)|浏览(194)

这意味着什么,我该如何绕过它?

SELECT MySequence.CURRVAL FROM DUAL;

字符串
测试结果:
ORA-08002:此会话中尚未定义序列MySequence.CURRVAL

fdbelqdn

fdbelqdn1#

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

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

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

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

qco9c6ql

qco9c6ql2#

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

hkmswyz6

hkmswyz63#

用这个

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'

字符串

ycl3bljg

ycl3bljg4#

select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';

字符串
在上面的查询SEQ_V_WORKORDER_RECNO中,我的序列名替换为您的序列名

szqfcxe2

szqfcxe25#

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

bjg7j2ky

bjg7j2ky6#

我会绕过它

select last_number from all_sequences where sequence_name = 'MySequence';

字符串

相关问题