[Oracle] 시퀀스 로 일련번호 가져오기(순서,연속,차례) , oracle sequence

일련번호를 부여하는 방법은 크게 2가지가 있습니다.

하나는 해당 값의 MAX value 를 가져온 다음에 + 1을 하는 방식, 다른 하나는 시퀀스 객체를 이용하는 방식입니다.

오늘은 오라클 시퀀스 방식으로 일련번호를 가져오는 방법에 대해 안내해드리겠습니다. 우선, 시퀀스 문법(syntax)은 다음과 같습니다! ('MAX value + 1' 방식은 여러 언어에서 쉽게 구현할 수 있을테니 별도로 다루지 않겠습니다~)

CREATE SEQUENCE [schema.]sequenceName
    [INCREMENT BY int]
    [START WITH int]
    [MAXVALUE int]
    [NOMAXVALUE]
    [MINVALUE int]
    [NOMINVALUE]
    [CYCLE]
    [NOCYCLE]
    [CACHE int]
    [NOCACHE]
    [ORDER]
    [NOORDER]
;

INCREMENT BY 는 증감량입니다. 0은 불가하고 +인 경우 증가하는 방식, -인 경우 감소하는 방식입니다.

START WITH 는 시퀀스에 처음으로 할당되는 값입니다. 보통 증가형을 많이 쓰기에 1을 할당합니다. 감소형으로 설정하려면 시퀀스에 대한 원하는 최댓값을 부여해 주세요.

[ MAXVALUE | NOMAXVALUE ] 최댓값을 설정합니다. 별도의 명시를 하지 않으면 NOMAXVALUE 가 기본값으로 설정합니다. 참고로 NOMAXVALUE 는 실제로 최댓값 없이 무한정하다는 뜻은 아니고, 증가 시퀀스에서는 10^27 만큼, 감소 시퀀스에서는 -1 만큼 최댓값을 할당합니다.

[ MINVALUE | NOMINVALUE ] 최솟값 설정합니다. 명시 안 하면 NOMINVALUE 가 기본입니다. NOMINVALUE 는 최솟값 없이 무한정하다는 뜻은 아니고, 증가 시퀀스에서는 1 만큼, 감소 시퀀스에서는 -10^26 만큼 최솟값을 할당합니다.

[ CYCLE | NOCYCLE ] 최댓값, 최솟값 도달 이후 다시 반복할지 여부입니다. 명시를 안 하면 기본적으로 순환하지 않습니다.(No Cycle이 기본값)

[ CACHE int | NOCACHE ] 시퀀스 선할당(preallocate)여부입니다. 오라클은 CACHE int 방식을 효율성 측면에서 권장하며, 원하는 값을 설정하면 됩니다.

oracle sequence

시퀀스의 장점은 'MAX + 1 방식'을 채택하며 발생할 수 있는 일련번호의 중복이 절대 발생하지 않는다는 점입니다.

NEXTVAL 을 선택하는 순간 세션에서 해당 값을 정의하고 시작하기 때문입니다.

사용법은 우선 NEXTVAL 을 선택하여 시퀀스를 정의하고 CURRVAL 을 통해 진행하면 됩니다.

시퀀스 삭제, 드랍하기

DROP SEQUENCE sequence_name;

시퀀스 생성하기 (예시)

CREATE SEQUENCE sequence_name
   START WITH 1
   MAXVALUE 99999999999999999999999999
   MINVALUE 1
   NOCYCLE
   CACHE 3
   NOORDER;

시퀀스 다음값 세션에 정의하기 (일련번호 가져오기)

SELECT sequence_name.NEXTVAL FROM DUAL;

시퀀스 현재값 조회하기

SELECT sequence_name.CURRVAL FROM DUAL;

댓글