47

これはどういう意味ですか?どうすれば回避できますか?

SELECT MySequence.CURRVAL FROM DUAL;

結果:

ORA-08002: シーケンス MySequence.CURRVAL は、このセッションでまだ定義されていません

4

5 に答える 5

60

mysequence.CURRVAL は、セッションでシーケンス mysequence から取得された最新の値を返すためセッションで少なくとも 1 回 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

セッションで少なくとも 1 回は 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 に答える