데이터베이스/Oracle

[Oracle] 시퀀스(Sequence) 사용법

반응형

시퀀스(Sequence)?

유일한 값을 생성해 주는 오브젝트

 

자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 오브젝트입니다.

보통 중복 값을 허용하지 않는 PK에 사용을 많이 합니다.

예시로는 회원번호, 게시판 글 번호 등... 지속적으로 순번이 증가할 때 사용합니다.

 

사용방법

CREATE SEQUENCE [스키마명].[시퀀스]

INCREMENT BY 1 -> 1씩 증가

START WITH 1 -> 1부터 시작, WITH 100인 경우 100부터 시작

MINVALUE 1 -> 1부터 시작(최솟값)

MAXVALUE 100 -> 100까지(최댓값)

NOCYCLE -> 순환하지 않음

NOCACHE  -> 시퀀스 값을 메모리에 할당하지 않음

 

  • INCREMENT BY : 시퀀스 실행 시 증가시킬 값 
  • START WITH : 시퀀스의 시작 값 (MINVALUE와 같거나 커야 한다)
  • MINVALUE : 시퀀스가 시작되는 최솟값
  • MAXVALUE : 시퀀스가 끝나는 최댓값  
    (default = 9999999999999999999999999999)
  • NOCYCLE | CYCLE : 시퀀스의 값이 최댓값 도달 시 시퀀스 생성 중지 | 시퀀스의 값이 최댓값에 도달 시 다시 최솟값부터 시작
    (default = NOCYCLE)
  • NOCACHE | CACHE : 시퀀스 값을 메모리에 할당하지 않음 | 메모리에 시퀀스 값을 미리 할당
    (default = NOCACHE)
  • NOORDER | ORDER : 사용 안 함 | 요청 순서로 값을 생성하여 발생 순서를 보장
    (default = NOORDER)
시퀀스 생성
CREATE SEQUENCE TEST_SEQ
INCREMENT BY 1 -- 1씩 증가.
START WITH 10 -- 10부터 시작, WHIT 100 = 100부터 시작
MAXVALUE 100 -- 100까지
MINVALUE 1; -- 1부터

 

CURRVAL  : 현재 SEQ  (맨 처음엔 확인 불가. NEXTVAL 1회 실행 후 확인이 가능하다)

SELECT TEST_SEQ.currval --현재 시퀀스 값 확인
FROM DUAL;

NEXTVAL : 다음 값 (CURRVAL + INCREMENT BY [NUMBER])

SELECT TEST_SEQ.nextval -- 다음 시퀀스 값
FROM DUAL;

 

시퀀스 수정
ALTER SEQUENCE TEST_SEQ
INCREMENT BY 3; --3씩 증가

ALTER SEQUENCE TEST_SEQ
MAXVALUE 9999; -- MAXVALUE(시퀀스 최댓값)을 9999로 변경

START WITH(초기값)는 변경할 수 없다. 

초기화는 불가능. 무조건 지우고 다시 만들어야 한다.

ALTER SEQUENCE TEST_SEQ 
START WITH 10; --에러!!

 

시퀀스 검색
SELECT * FROM USER_SEQUENCES; --전체 시퀀스 검색

SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'TEST_SEQ'; --특정 시퀀스 검색

 

시퀀스 삭제
DROP SEQUENCE TEST_SEQ;

 

반응형