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;
'DataBase > Sql' 카테고리의 다른 글
[Sql] Oracle - ROLLUP 과 GROUPING (0) | 2010.12.22 |
---|---|
[Sql] Oracle - Function 사용하기 (0) | 2010.11.16 |
[Sql] Oracle - distinct, rowid 중복제거, 최신 데이터 하나만 가져오기 (0) | 2010.11.03 |
[Sql] Oracle - Column의 comment 확인 (0) | 2010.09.10 |
[Sql] DB2 - 해당 년월일의 일 수 구하기 (0) | 2010.09.10 |