일련번호를 부여하는 방법은 크게 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 방식을 효율성 측면에서 권장하며, 원하는 값을 설정하면 됩니다.
시퀀스의 장점은 '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;