시퀀스란?
시퀀스(sequence)는 오라클 데이터베이스에서 특정 규칙에 맞는 연속 숫자를 생성하는 객체이다. 번호를 사용해야 하는 사용자에게 계속 다음 번호를 만들어 주는 역할을 한다. 단지 연속하는 새로운 번호를 만드는 일이라면 MAX함수에 1을 더한 값을 사용해도 상관없을 것이다. 실제로 연속하는 숫자로 이루어진 웹 서비스의 새로운 게시판 번호나 상품 주문 번호 등을 생성할때 종종 생성하는 방식이다. SELECT MAX(번호) +1 FROM 게시판테이블; 하지만 이 방식은 테이블 데이터가 많아질수록 가장 큰 데이터를 찾고 새로운 번호를 계산하는 시간이 함께 늘어나기때문에 아쉬운 부분이 있고, 동시에 여러 곳에서 새로운 번호를 요구했을 경우 SELECT문의 결과 값이 같게 나와 번호가 중복될 수도 있다. 이와 비교하여 시퀀스는 단순히 번호 생성을 위한 객체이지만 지속적이고 효율적인 번호 생성이 가능하므로 여러모로 자주 사용하는 객체이다.
시퀀스 생성
시퀀스 역시 CREATE문으로 생성하며 다양한 옵션을 지정할 수 있다
CREATE SEQUENCE 시퀀스 이름 -- [1]아래 절을 지정하지 않을경우 1부터 시작해 1만큼 계속 증가하는 시퀀스 생성(필수)
[ INCREMENT BY n ] -- [2] 시퀀스에서 생성할 번호의 증가 값 : 기본값 = 1 (선택)
[ START WITH n ] -- [3] 시퀀스에서 생성할 번호의 시작 값 : 기본값 = 1 (선택)
[ MAXVALUE n | NOMAXVALUE ] -- [4] 시퀀스에서 생성할 번호의 최댓값 지정. 최댓값은 시작값 이상, 최솟값을 초과한 값으로 지정. NOMAXVALUE로 지정하면 오름차순은 10^27, 내림차순의 경우 -1로 설정한다 (선택)
[ MINVALUE n | NOMINVALUE ] -- [5] 시퀀스에서 생성할 번호의 최솟값 지정. 최솟값은 시작값 이하, 최댓값 미만 값으로 지정. NOMINVALUE로 지정하면 오름차순은 1, 내림차순의 경우 -10^26으로 설정한다 (선택)
[ CYCLE | NOCYCLE ] --[6] 시퀀스에서 생성한 번호가 MAXVALUE에 도달했을 경우 CYCLE이면 시작값에서 다시 시작, NOCYCLE이면 번호 생성이 중단되고, 추가번호 생성을 요청하면 오류발생 : 기본값 = CYCLE (선택)
[ CACHE n | NOCACHE ] -- [7] 시퀀스가 생성할 번호를 메모리에 미리 할당해 놓은 수를 지정, NOCACHE는 미리 생성하지 않도록 설정. 옵션을 모두 생략하면 기본값은 20 (선택)
시퀀스 사용
생성된 시퀀스를 사용할 때는 [ 시퀀스이름.CURRVAL ] 과 [ 시퀀스이름.NEXTVAL ]을 사용할 수 있다. CURRVAL은 시퀀스에서 마지막으로 생성한 번호를 반환하며, NEXTVAL은 다음번호를 생성한다. CURRVAL은 시퀀스를 생성하고 바로 사용하게 되면 번호가 만들어진적이 없으므로 오류가 난다. NEXTVAL은 NOCYCLE 옵션으로 설정되어있다면 MAXVALUE 생성 이후 실행시 오류가 난다.
시퀀스 수정
ALTER 명령어로 시퀀스를 수정한다. ALTER SEQUENCE 시퀀스이름 [ 변경할 조건 값] ; 을 적어주면 되고 START WITH값은 변경이 불가능하다.
시퀀스 삭제
DROP 명령어를 이용하면 시퀀스를 삭제할 수 있다. DROP SEQUENCE 시퀀스이름 ; 시퀀스를 삭제해도 시퀀스를 사용해서 추가된 데이터는 삭제되지 않음을 알아두자.
'DATABASE > OBJECT : 객체' 카테고리의 다른 글
05. 공식 별칭을 지정하는 동의어 (1) | 2024.03.23 |
---|---|
03. 테이블처럼 사용하는 뷰 (1) | 2024.03.23 |
02. 더 빠른 검색을 위한 인덱스 (1) | 2024.03.23 |
01. 데이터베이스를 위한 데이터를 저장한 데이터 사전 (0) | 2024.03.23 |