본문 바로가기

프로그래밍/DataBase

[DataBase]시퀀스

시퀀스란

자동으로 고유한 번호를 반환해 주는 번호생성기와 같은 객체이다.

일반적으로 ID, NUM과 같은 PK값의 중복을 방지하기 위해 사용된다.

 

 

 

시퀀스 생성

 문법

CREATE SEQUENCE sequence
    [INCREMENT BY n]
    [START WITH n]
    [ {MAXVALUE n | NOMAXVALUE} ]
    [ {MINVALUE n | NOMINVALUE} ]
    [ { CYCLE | NOCYCLE} ]
    [ { CACHE n | NOCACHE} ];

시퀀스의 속성을 사용할 때는 순서에 상관없고 ,(콤마)없이 나열하여 사용하면 된다.

 

 

 

속성

속성 내용
INCREMENT BY n  시퀀스가 한번에 증감될 수 n을 지정한다.

 생략 시 기본 값은 1이다.
START WITH n  시작 시퀀스 번호 n을 지정한다.

 생략 시 기본 값은 1이다.
MAXVALUE n 

NOMAXVALUE
 최대값 n을 임으로 지정한다.

 생략 시 기본 값인 NOMAXVALUE로 설정되고 시스템이 지정된 최대값을 적용한다.
MINVALUE n 

NOMINVALUE
 최소값 n을 임으로 지정한다.

 생략 시 기본 값인 NOMINVALUE로 설정되고 시스템이 지정된 최소값을 적용한다.
CYCLE / NOCYCLE  최대값에 도달한 후 초기값부터 순환하도록 한다.

 생략 시 기본 값인 NOCYCLE로 설정되고 최대값에 도달 하더라도 순환되지 않는다.
CACHE n

NOCACHE
 미리 n개의 시퀀스를 만들어 놓고 시퀀스 번호를 부여한다.
생략 시 기본값은 CACHE 20으로 설정된다.

 NOCACHE는 호출될 때 마다 시퀀스를 부여하도록 한다.

 

 

사용 예제

 시퀀스 생성

CREATE SQUENCE dept_id_seq
increment by 10
start wiht 340
maxvalue 10000;

시작번호가 340이고

한번에 10씩 증가하면서

시퀀스의 최대 값이 10000인

dept_id_seq라는 이름의 시퀀스를 만든다.

 

이미 마지막 회원의 아이디 시퀀스가 330임을 확인하고 10씩 증가하는 규칙에 따라 340부터 시작하도록 설정해 놓았다.

 

 

 

시퀀스 사용

생성한 시퀀스를 사용해보도록 하자.

 

시퀀스명.nextval : 마지막으로 사용한 시퀀스의 다음 값 반환

시퀀스명.currval : 마지막으로 사용한 시퀀스 값 반환

 

insert into departments
values (dept_id_seq.nextval, 'Test1', 200, 1700);

( departments 테이블은 칼럼 순서가 DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID 순으로 생성 돼 있다.)

 

departments 테이블

dept_id_seq.nextval, 'Test1', 200, 1700 의 값을 가지는 데이터를 입력한다.

 

미리 DEPARTMENT_ID의 마지막 시퀀스 번호가 330임을 확인 하고 생성 해 놓았기 때문에 dept_id_seq.nextval을 통해  DEPARTMENT_ID에 자동으로 다음 시퀀스 번호인 340를 넣는다.

 

 

시퀀스 수정

 문법

ALTER SEQUENCE 시퀀스명

    속성 속성값
    속성 속성값
      ...
    속성 속성값;

다만 START WITH n의 속성은 수정이 불가하다.

 

시퀀스를 이용하여 게시판 번호 등을 쓰다보면

1

2

3

commit

5

6

rollback

 

이러한 경우가 생길 수 있다. 이때 게시판의 번호는 3번까지 남아있지만, 다음번의 시퀀스 번호는 7이된다. 이러한 경우를 갭이라 하는데, 이런 갭을 해결하는 방법은 수동으로 5와 6의 시퀀스 번호를 써주는 방법 밖에 없다.

 

시퀀스 삭제

 문법

DROP SEQUENCE 시퀀스명;

'프로그래밍 > DataBase' 카테고리의 다른 글

[DataBase]뷰  (0) 2021.04.19
[DateBase]테이블 복사  (0) 2021.04.07
[DateBase]그룹함수  (0) 2021.04.05
[DataBase]일반 함수  (0) 2021.03.31
[DataBase]문자함수  (0) 2021.03.23