programing

Oracle: 시퀀스 MySequence.currval이 이 세션에서 아직 정의되지 않았습니다.

i4 2023. 2. 20. 23:56
반응형

Oracle: 시퀀스 MySequence.currval이 이 세션에서 아직 정의되지 않았습니다.

이것은 무엇을 의미하며 어떻게 회피할 수 있을까요?

SELECT MySequence.CURRVAL FROM DUAL;

결과:

ORA-08002: 시퀀스 My Sequence.이 세션에서 CURRVAL이 아직 정의되지 않았습니다.

마이시퀀스CURRVAL은 세션의 시퀀스 mysequence에서 얻은 최신 값을 반환하므로 mysequence를 사용하여 값을 얻을 때까지 정의되지 않습니다.NEXTVAL이 세션에 적어도1회 이상 존재합니다.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'
select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';

상기 질문에서SEQ_V_WORKORDER_RECNO내 시퀀스 이름은 당신의 시퀀스 이름으로 대체합니다.

더그,

진짜 질문은 세션에서 넥스트밸브를 사용하지 않았는데 왜 커브가 필요한가 하는 것이다.USER/ALL/DBA_의 LAST_NUMBER 열을 볼 수 있습니다.SEQUENCEs 뷰는 표시되지만 이 기능을 사용하기 시작하면 동시성 문제가 발생할 수 있습니다.

잘 부탁드립니다, 롭.

언급URL : https://stackoverflow.com/questions/809247/oracle-sequence-mysequence-currval-is-not-yet-defined-in-this-session

반응형