DB/Oracle

[Oracle] 규칙에 따라 순번을 생성하는 시퀀스(Sequence)

EARTH_ROOPRETELCHAM 2022. 5. 28. 17:17
728x90
반응형

들어가기 전에

이 포스팅은 오라클로 배우는 데이터베이스 입문(이지훈 저)을 읽으면서 기억하고자 하는 내용 및 추가적으로 알아본 내용을 담았습니다. 책 전체 내용을 보시고 싶으신 분은 책을 구매하시어 읽어보시길 바랍니다.

 

이번 포스팅에서는 규칙에 따라 순번을 생성하는 시퀀스에 대해 알아보도록 하겠습니다.

시퀀스(Sequence)

시퀀스(Sequence)란, 오라클 데이터베이스에서 특정 규칙에 맞는 연속 숫자를 생성하는 객체입니다.

시퀀스 기본 형식

CREATE SEQUENCE [시퀀스 이름]
[INCREMENT BY n] -- 시퀀스에서 생성한 번호의 증가값(default 1)(선택)
[START WITH n] -- 시퀀스에서 생성할 번호의 시작값(선택)
[MAXVALUE n | NOMAXVALUE] -- 시퀀스에서 생성할 번호의 최댓값(NOMAXVALUE: 오름차순 10^27, 내림차순 -1)(default NOMAXVALUE)(선택)
[MINVALUE n | NOMINVALUE] -- 시퀀스에서 생성할 번호의 최솟값(NOMINVALUE: 오름차순 1, 내림차순 10^(-26))(default NOMINVALUE)(선택)
[CYCLE | NOCYCLE] -- CYCLE로 설정할 경우, 시퀀스에서 생성한 번호가 최댓값에 도달했을 때 시작 값(START WITH)에서 다시 시작(defulat NOCYCLE)(선택)
[CACHE n | NOCACHE] -- 시퀀스가 생성할 번호를 메모리에 미리 할당해 놓은 수로, NOCACHE이 경우 미리 생성하지 않음(선택)
;

시퀀스 사용 예시

먼저, 시퀀스를 사용해보기 위해 DEPT 테이블과 열 구성은 같고 데이터는 없는 DEPT_SEQUENCE를 생성합니다. 기존 DEPT 테이블을 이용해 테이블을 생성하되, 데이터는 없도록 조건절에 1<>1을 작성하였습니다.

DEPT_SEQUENCE 테이블 생성

이제, DEPT_SEQUENCEDEPTNO로 사용할 시퀀스를 생성해보겠습니다. 아래와 같이 시퀀스를 생성한 후 USER_SEQUENCES를 조회하여 시퀀스가 제대로 생성되었는지 확인할 수 있습니다.

SEQUENCE 생성

생성된 시퀀스를 사용할 때는 [시퀀스 이름.CURRVAL][시퀀스 이름.NEXTVAL]을 사용할 수 있습니다.

  • CURRVAL: 시퀀스에서 마지막으로 생성한 번호를 반환
    • 시퀀스를 생성하고 바로 CURRVAL을 사용하면 번호가 만들어진 적이 없어 오류 발생
  • NEXTVAL: 다음 번호를 생성

이제, SEQ_DEPT_SEQUENCE를 사용해 DEPT_SEQUENCE 테이블에 새로운 부서를 추가해보도록 하겠습니다.

시퀀스를 이용한 테이블에 데이터 삽입

  • SEQ_DEPT_SEQUENCE를 처음 사용하였기 때문에, DEPTNO에 시작 값(START WITH)인 10이 들어갔음을 확인할 수 있습니다.
  • 시퀀스를 사용하게되면, SEQ_DEPT_SEQUENCE.CURRVAL에 마지막으로 사용한 값이 들어갑니다.

시퀀스 수정

ALTER 명령어를 이용하면 시퀀스를 수정할 수 있습니다. 시퀀스 수정 시, 다른 옵션들은 수정이 가능하지만 START WITH 값은 변경이 불가능합니다.

ALTER SEQUENCE [시퀀스 이름]
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE]
;

시퀀스 수정 예시

시퀀스 삭제

DROP 명령어를 사용하면 시퀀스를 삭제할 수 있습니다. 시퀀스를 삭제해도 기존에 시퀀스를 사용해 추가된 데이터는 삭제되지 않습니다.

DROP SEQUENCE [시퀀스 이름];

시퀀스를 삭제해도, 기존에 시퀀스를 이용해 생성한 데이터는 삭제되지 않음

참고 자료

  • CREATE SEQUENCE
  • 오라클로 배우는 데이터베이스 입문(이지훈 저)
728x90
반응형