테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기이며, 시퀀스를 기본키로 사용하게 되면 사용자의 부담을 줄일 수 있음
CREATE SEQUENCE sequence_name
[START WITH n] // 시퀀스 번호의 시작값을 지정할 때 사용
[INCREMENT BY n] // 연속적인 시퀀스 번호의 증가치를 지정할 때 사용
[MINVALUE n] // 시퀀스가 가질 수 있는 최소값 지정
[MAXVALUE n] // 시퀀스가 가질 수 있는 최대값 지정
[CYCLE | NOCYCLE] // 최대값 도달 시 시작값에서 다시 시퀀스 시작
[CACHE n | NOCACHE] // CACHE 사용 여부
# MAXVALUE n | NOMAXVALUE
MAXVALUE는 시퀀스가 가질 수 있는 최대값 지정
NOMAXVALUE는 ASCENDING 순서일 경우
승이고, DESCENDING 순서일 경우 -1로 설정
# MINVALUE n | NOMINVALUE
MINVALUE는 시퀀스가 가질 수 있는 최소값 지정
NOMAXVALUE는 ASCENDING 순서일 경우 1이고, DESCENDING 순서일 경우
으로 설정
# CYCLE | NOCYCLE
CYCLE은 지정된 시퀀스 값이 최대값까지 증가가 완료되면 다시 START WITH 옵션에 지정한 시작값에서 다시 시퀀스 시작
NOCYCLE는 증가가 완료되면 에러 유발
# CACHE n | NOCACHE
CACHE는 메모리상의 시퀀스 값을 관리하도록 하며, 기본값은 20
NOCACHE는 원칙적으로 메모리 상에서 시퀀스를 관리하지 않음
# 시퀀스 객체 정보 보기
SELECT sequence_name, min_value, max_value, increment_by, cycle_flag
FROM user_sequences;
1. CURRVAL과 NEXTVAL
CURRVAL(CURRENT VALUE)은 시퀀스의 현재 값을 반환하고, NEXTVAL(NEXT VALUE)은 현재 시퀀스 값의 다음 값 반환
CURRVAL을 사용하기 위해 NEXTVAL을 먼저 사용해 값을 미리 생성
# CURRVAL와 NEXTVAL을 사용할 수 있는 경우
- 서브 쿼리가 아닌 SELECT 문
- INSERT 문의 SELECT 절
- INSERT 문의 VALUE 절
- UPDATE 문의 SET 절
# CURRVAL와 NEXTVAL을 사용할 수 없는 경우
- VIEW의 SELECT 절
- DISTINCT 키워드가 있는 SELECT 문
- GROUP BY, HAVING, ORDER BY 절이 있는 SELECT 문
- SELECT, DELETE, UPDATE의 서브 쿼리
- CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값
# 시퀀스 객체로부터 새로운 값 생성
SELECT dept_seq.nextval from dual;
# 시퀀스 객체로부터 현재 값 보기
SELECT dept_seq.currval from dual;
2. 시퀀스 제거와 수정
# 시퀀스 제거
DROP sequnce [seq];
# 시퀀스 수정
CREATE SEQUENCT와 구조가 동일하나 START WITH 옵션은 변경할 수 없음으로 다른 번호에서 다시 시작하려면 이전 시퀀스를 삭제하고 다시 생성
ALTER SEQUENCE sequence_name
[INCREMENT BY n] // 연속적인 시퀀스 번호의 증가치를 지정할 때 사용
[MINVALUE n] // 시퀀스가 가질 수 있는 최소값 지정
[MAXVALUE n] // 시퀀스가 가질 수 있는 최대값 지정
[CYCLE | NOCYCLE] // 최대값 도달 시 시작값에서 다시 시퀀스 시작
[CACHE n | NOCACHE] // CACHE 사용 여부
'Database > Oracle' 카테고리의 다른 글
Oracle。그룹 함수 (0) | 2017.07.12 |
---|---|
Oracle。NVL, DECODE, CASE 함수 (0) | 2017.06.09 |
Oracle。형 변환 함수와 오라클 주요 함수 2 (0) | 2017.06.07 |
Oracle。DUAL 테이블과 오라클 주요 함수 1 (0) | 2017.06.05 |
Oracle。ORDER BY 절과 집합 연산자 (0) | 2017.06.03 |