programing

Oracle 시퀀스가 1이 아닌 2로 시작함

megabox 2023. 8. 2. 08:58
반응형

Oracle 시퀀스가 1이 아닌 2로 시작함

예기치 않은 동작:

Oracle 시퀀스가 11g(10g으로 작동)인 경우 이상한 동작이 발생합니다.

CREATE SEQUENCE test_sequence START WITH 1;
CREATE TABLE test_table ( val INT );

INSERT INTO test_table VALUES ( test_sequence.NEXTVAL );

시퀀스가 1로 시작하더라도 첫 번째로 삽입된 은 2입니다.

SELECT * FROM test_table;

       VAL
----------
         2

예상 동작:

선택NEXTVAL예상대로 삽입되지 않은 경우:

CREATE SEQUENCE test_sequence_2 START WITH 1;

SELECT test_sequence_2.NEXTVAL FROM dual

   NEXTVAL
----------
         1

질문:.

오라클 11g를 사용하여 이것을 복제할 수 있는 사람이 있습니까?이것은 알려진 문제입니까?

사용 중
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production.

이는 11.2 SQL Language Reference에 문서화되어 있습니다.

지연 세그먼트 생성을 사용하는 테이블에 시퀀스 값을 삽입하려고 하면 시퀀스가 반환하는 첫 번째 값이 건너뜁니다.

My Oracle Support(Metalink) 노트 및 해결 방법은 Jeffrey Kemp의 답변 링크를 참조하십시오.

이 "문서화되지 않은 기능"이 원인이라고 생각합니다.My Oracle 지원 문서 ID 1273858.1(유감스럽게도 급여 지급 대상에서 제외되어 있으므로 여기서 복사할 수 없음)을 참조하십시오.

지연된 세그먼트 생성 없이 사용해 보고 문제가 지속되는지 확인합니다.

11G에서는 재현할 수 없습니다. 즉, 당신의 단계를 따른 후 테이블에 1이 포함되어 있습니다.

그러나 시퀀스가 공백이 없는 것으로 보장되지 않기 때문에 이것이 "문제"로 간주되어야 하는지 여부는 논쟁의 여지가 있습니다.보증을 사용하여 시작하는 것은 시퀀스가 지정된 시작 값보다 낮은 값을 반환하지 않는다는 것입니다. 예를 들어 기존 데이터와의 충돌을 방지합니다.하지만 저는 당신이 보고 있는 것이 놀랍다는 것에 동의하며 그 이유를 알고 싶습니다!

사용:

CREATE SEQUENCE SQ_SEQUENCE_NAME
    INCREMENT BY 1
    START WITH 1
    MINVALUE 0  -- This will ensure start at 1!
    MAXVALUE 99
    NOCYCLE
    NOCACHE
    ORDER;

언급URL : https://stackoverflow.com/questions/4153807/oracle-sequence-starting-with-2-instead-of-1

반응형