시퀀스(Sequence)란?
시퀀스란 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체입니다. 보통 PK값에 중복값을 방지하기위해 사용합니다. 예를들어 게시판에 글이 하나 추가될때마다 글번호(PK)가 생겨야 한다고 해보겠습니다. 만약 100번까지 글 번호가 생성되어있다면 그 다음 글이 추가가 되었을 경우 글 번호가 101으로 하나의 ROW를 생성해주어야 할것입니다. 이때 101이라는 숫자를 얻으려면 기존 글번호중 가장 큰 값에 +1을 하는 로직을 어딘가에 넣어야하는데 시퀀스를 사용하면 이러한 로직이 필요없이 데이터베이스에 ROW가 추가될때마다 자동으로 +1을 시켜주어 매우 편리합니다.
시퀀스(Sequence) 생성
--문법
CREATE SEQUENCE [시퀀스명]
INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1
START WITH [시작숫자] -- 시작숫자의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE
NOMINVALUE OR MINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -1028
-- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함
NOMAXVALUE OR MAXVALUE [최대값] -- NOMAXVALUE : 디폴트값 설정, 증가일때 1027, 감소일때 -1
-- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함
CYCLE OR NOCYCLE --CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작 NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지
CACHE OR NOCACHE --CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고 NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음
--예제
CREATE SEQUENCE EX_SEQ --시퀀스이름 EX_SEQ
INCREMENT BY 1 --증감숫자 1
START WITH 1 --시작숫자 1
MINVALUE 1 --최소값 1
MAXVALUE 1000 --최대값 1000
NOCYCLE --순한하지않음
CACHE; --메모리에 시퀀스값 미리할당
위와같이 쿼리를 날리면 시퀀스가 생성됩니다. 위 예제를 설명하자면 이 시퀀스는 EX_SEQ라는 시퀀스이고 1부터 시작해 1씩 증가하며 시작값은 1부터 1000까지 순번을 자동하는 시퀀스입니다. Cache를 사용하여 시퀀스값의 액세스 효율이 Cache를 사용하지 않았을때보다 증가합니다.
※ 위 쿼리를 조금만 변형하면 2씩 증가하는 시퀀스, 큰 수에서 작은수로 감소하는 시퀀스도 생성할 수 있습니다.
시퀀스(Sequence) 사용 예시
CREATE TABLE EX_TABLE (BOARD_NUM NUMBER(19,6) NOT NULL);
1. 테스트 할 간단한 TEST 테이블을 만듭니다.
INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);
INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);
INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);
2. 위에서 만들었던 EX_SEQ 시퀀스로 TEST테이블에 데이터를 넣습니다.
SELECT * FROM EX_TABLE
3. 넣었던 데이터를 SELECT문으로 확인해봅니다.
4. 위와같이 1, 2, 3이라는 값이 순차적으로 INSERT된것을 볼 수 있습니다. 시퀀스명.NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져옵니다.
시퀀스(Sequence) 조회
SELECT EX_SEQ.CURRVAL FROM DUAL --해당 시퀀스 값 조회
SELECT * FROM USER_SEQUENCES --전체 시퀀스 조회
시퀀스(Sequence) 수정
--문법
ALTER SEQUENCE [시퀀스명]
INCREMENT BY [증가값]
NOMINVALUE OR MINVALUE [최솟값]
NOMAXVALUE OR MAXVALUE [최대값]
CYCLE OR NOCYCLE [사이클 설정 여부]
CACHE OR NOCACHE [캐시 설정 여부]
--예제
ALTER SEQUENCE EX_SEQ
INCREMENT BY 2
MINVALUE 2
MAXVALUE 10000
CYCLE
NOCACHE;
시퀀스는 DDL문이므로 ALTER문을 사용하여 수정이 가능합니다. 시작값은 수정이 불가능합니다. 그리고 현재 들어있는 값보다 높은 최솟값(감소 시퀀스일 경우 그 반대)로도 설정할 수 없습니다.
시퀀스(Sequence) 삭제
--문법
DROP SEQUENCE [시퀀스명]
--예제
DROP SEQUENCE EX_SEQ
'DB > Oracle' 카테고리의 다른 글
[Oracle] 오라클 파티션 테이블 사용법 (생성, 조회, 수정, 삭제) (1) | 2019.11.11 |
---|---|
[Oracle] 오라클 시노님(Synonym) 사용법 총정리 (생성, 조회, 권한, 삭제) (2) | 2019.11.10 |
[Oracle] 오라클 인덱스(Index) 사용법 총정리(생성, 조회, 삭제, 리빌드) (4) | 2019.11.06 |
[Oracle] 오라클 샘플 테이블 및 데이터 만들기 (스크립트 제공) (1) | 2019.11.05 |