본문 바로가기

Database/Oracle

Oracle。시퀀스(Sequence)

728x90
반응형

테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기이며, 시퀀스를 기본키로 사용하게 되면 사용자의 부담을 줄일 수 있음

 

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 사용 여부
728x90
반응형