DB를 사용하다 보면 순차적으로 값이 증가해서 유일한 값을 지정하는 경우가 있습니다.
Oracle에서는 이럴때 Sequence를 사용합니다.

 
Sequence 란?
- Oracle 내부에서 순차적으로 증가되는 값을 가지는 유일(Unique) 객체.
- 시퀀스를 생성하게 되면 이것을 이용하여 순차적으로 증가되는 관리번호같은 것등을 자동생성함.
- 메모리에 cache되었을때에 Sequence 값의 액세서 효율이 증가함.
- 테이블과 독립적으로 생성되므로 여러테이블에서 사용될수 있음.

 

사용하는 시퀀스 확인하기.
- 현재사용하는 Oracle 시스템에서 사용되고 있는 시퀀스를 확인하는 쿼리입니다.
- SELECT * FROM USER_SEQUENCES

 

시퀀스 생성하기.
 
- CREATE SEQUENCE [SEQUENCE_NAME]
    START WITH [n]
    INCREMENT BY [n]
    MAXVALUE [n] | NOMAXVALUE
    MINVALUE [n] | NOMINVALUE
    CYCLE | NOCYCLE
- START WITH [n] : n으로 시퀀스 시작값을 설정한다.
- INCREMENT BY [n] : n만큼 시퀀스가 증가한다.
- MAXVALUE, MINVALUE : 지정된 숫자만큼 최대값 최소값이 정해진다.

구문은 이렇지만 기본적으로 생성할 때는 다음 처럼 사용한다.
- CREATE SEQUENCE SEQ_NAME INCREMENT BY 1 START WITH 1
- 시작값과 증가값을 1로 지정한 쿼리이다.

 

시퀀스 수정하기.
- ALTER SEQUENCE [SEQUENCE_NAME]
   INCREMENT BY [n]
   MAXVALUE [n] | NOMAXVALUE
   MINVALUE [n] | NOMINVALUE
   CYCLE | NOCYCLE
- START WITH는 수정할 수 없습니다.

 

시퀀스 삭제하기.
-
DROP SEQUENCE [ SEQUENCE_NAME]

 

시퀀스 사용하기.
-
현재까지 사용된 시퀀스 번호 확인
- SELECT SEQ_NAME.CURRVAL FROM DUAL
- 시퀀스의 다음 값 확인
- SELECT SEQ_NAME.NEXTVAL FROM DUAL

※CURRVAL, NEXTVAL의 경우 사용할 수 있을 때와 없을 때가 있다.

  • 사용가능
    • 서브쿼리가 아닌 SELECT문
    • INSERT의 SELECT문
    • INSERT의 VALUE문
    • UPDATE의 SET 절
  • 사용불가
    • VIEW의 SELECT절
    • DISTINCT 키워드가 있는 SELECT문
    • GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
    • SELECT, DELETE, UPDATE의 SUBQUERY
    • CREATE TABLE, ALTER TALBLE 명령의 DEFAULT 값

 
ex)
CREATE SEQUENCE "HADM"."SN_SEQ"
            MINVALUE 1
            MAXVALUE 999999999999
            INCREMENT BY 1
            NOCYCLE
            NOORDER
            CACHE 20;



[출처] http://planmaster.tistory.com/375 


+ Recent posts