これはどういう意味ですか?どうすれば回避できますか?
SELECT MySequence.CURRVAL FROM DUAL;
結果:
ORA-08002: シーケンス MySequence.CURRVAL は、このセッションでまだ定義されていません
mysequence.CURRVAL は、セッションでシーケンス mysequence から取得された最新の値を返すため、セッションで少なくとも 1 回 mysequence.NEXTVAL を使用して値を取得するまで定義されません。CURRVAL の目的は、コード内でシーケンス値を複数回使用できるようにすることです。
insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);
insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
CURRVAL が任意のセッションによってシーケンスから取得された最後の値を返した場合、上記のコードでは役に立たず、実際にデータの破損につながる可能性があります!
セッションで少なくとも 1 回は NEXTVAL を使用するまで、CURRVAL を使用できないことが判明しました。
これを使って
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'
ダグ、
本当の問題は、セッションでnextvalを使用していないのに、なぜcurrvalが必要なのかということです。USER / ALL / DBA_SEQUENCESビューの列LAST_NUMBERを見ることができますが、それを使い始めるときは並行性の問題を考えてください。
よろしく、ロブ。
select * from user_sequences where sequence_name='SEQ_V_WORKORDER_RECNO';
上記のクエリでSEQ_V_WORKORDER_RECNO
、私のシーケンス名をあなたのシーケンス名に置き換えます