source

Oracle 시퀀스 다음 단계 및 곡선 혼란

factcode 2023. 7. 3. 23:22
반응형

Oracle 시퀀스 다음 단계 및 곡선 혼란

내 절차에서 나는 이것을 씁니다.

INSERT INTO questions(id, value) VALUES(my_seq.NEXTVAL, p_question);

INSERT INTO DEPENDENCIES(parent_question_id, child_question_id)
VALUES (my_seq.CURRVAL, my_seq.NEXTVAL);

시퀀스의 마지막 값이 1이라고 가정합니다.이 경우 다음과 같은 결과가 예상됩니다.

 my_seq.NEXTVAL = 2;
 my_seq.CURRVAL = 2;
 my_seq.NEXTVAL = 3;

하지만 다음과 같은 내용이 삽입됩니다.

 my_seq.NEXTVAL = 2;
 my_seq.CURRVAL = 3;
 my_seq.NEXTVAL = 3;

오라클이 왜 이런 식으로 시퀀스 값을 검색하는지 알고 싶습니다.

세 개의 개별 문이 있는 경우:

  1. 다음 발

  2. 만곡의

  3. 다음 발

그렇다면 당신이 옳을 것입니다.하지만 당신은 두 개 밖에 없습니다.

  1. 다음 발

  2. 만곡과 차곡

Currentval 및 nextval은 단일 원자 단계의 일부입니다. 다음 val 이전에는 current가 처리되지 않습니다.

이를 위해 변수를 사용해야 합니다.

DECLARE
  l_parent_question_id     NUMBER ;
  l_child_question_id      NUMBER ;
BEGIN
  l_parent_question_id := my_seq.NEXTVAL ;

  INSERT INTO questions(id, value) VALUES(l_parent_question_id, p_question);

  l_child_question_id := my_seq.NEXTVAL ;

  INSERT INTO DEPENDENCIES(parent_question_id, child_question_id)
  VALUES (l_parent_question_id, l_child_question_id); 

END ;

크리스찬의 설명을 따라가기 위해 문서화된 행동은 다음과 같습니다.

이러한 위치 중 하나에 두 가지 모두에 대한 참조가 포함된 경우CURRVAL그리고.NEXTVAL그런 다음 Oracle은 시퀀스를 증가시키고 둘 다에 대해 동일한 값을 반환합니다.CURRVAL그리고.NEXTVAL.

이 경우 '위치'는 그 앞에 있는 목록의 항목입니다. "각각,INSERT를 포함하는 진술VALUES절".

언급URL : https://stackoverflow.com/questions/51148996/oracle-sequence-nextval-and-currval-confusing

반응형