これはどういう意味ですか、どうすれば回避できますか?
SELECT MySequence.CURRVAL FROM DUAL;
結果:
ORA-08002:シーケンスMySequence.CURRVALはこのセッションではまだ定義されていません
mysequence.CURRVALは、yourセッションのシーケンスmysequenceから取得した最新の値を返すため、セッションで少なくとも1回mysequence.NEXTVALを使用して値を取得するまで定義されません。 CURRVALの目的は、コードでシーケンス値を複数回使用できるようにすることです。
insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);
insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
CURRVALがanyセッションによってシーケンスから取得した最後の値を返した場合、上記のコードでは役に立たず、実際にデータ破損につながる可能性があります!
セッションで少なくとも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
私のシーケンス名はあなたのシーケンス名に置き換えます