All of My Records

[Oracle] 시퀀스(Sequence)

by 캐떠린

시퀀스(Sequence)

  • 데이터베이스 객체 중 하나
  • 오라클 전용 객체(다른 DBMS 제품에는 없음)
  • 일련번호를 생성하는 객체(★★)
  • (주로) 식별자(일련번호)를 만드는데 사용한다. → PK 값으로 사용한다.

 

시퀀스 객체 생성

1. 간단 ver.

create sequence 시퀀스명;

 

2. Full ver.

create sequence 시퀀스명  -- full ver. 
    increment by n	--증감치(양수/음수) 
    start with n 	--시작값(Seed)
    maxvalue n 		--최댓값
    minvalue n 		--최솟값
    cycle 			--순환
    cache n;

 

시퀀스 객체 삭제

drop sequence 시퀀스명;

 

시퀀스 객체 사용(함수)

  1. 시퀀스명.nextVal : 호출 시 나올 다음 숫자를 반환
  2. 시퀀스명.currVal : 호출 시 현재 시퀀스 반환
SELECT 시퀀스명.nextVal FROM dual;
SELECT 시퀀스명.currVal FROM dual;

 

단, nextVal은 현재 시퀀스를 알 수 없다는 단점이 있다.

BUT currVal은 현재 시퀀스 번호를 확인할 수 있지만, 프로그램 재 실행 후, currVal 실행 시 아래와 같은 에러가 발생한다.

ORA-08002: sequence SEQNUM.CURRVAL is not yet defined in this session

→ 최소 1번 이상의 nextVal을 호출해야 사용이 가능하다. 이런 이유로 활용도가 생각보다 낮다.

 

시퀀스 객체 생성 Full ver. 활용

1. INCREMENT BY n : 증감치 설정, n만큼 시퀀스 증가

DROP SEQUENCE seqTest;

CREATE SEQUENCE seqTest
				INCREMENT BY -1;
			
SELECT seqTest.nextVal FROM dual;
-- 위 예시의 경우 seq가 -1, -2, --- 로 -1만큼 시퀀스 증가

 

2. START WITH n : 시작값 설정, n부터 시작하는 시퀀스 생성

DROP SEQUENCE seqTest;

CREATE SEQUENCE seqTest
				START WITH 10;
			
SELECT seqTest.nextVal FROM dual;
-- 위 예시의 경우 seq가 10부터 시작하여 1씩 증가

 

3. MAXVALUE n, MINVALUE n : 최댓값/최솟값 설정, n까지 시퀀스 생성(n 초과 시 생성 불가)

CREATE SEQUENCE seqTest
				--INCREMENT BY -1;
				--START WITH 10;
				MAXVALUE 10;
			
SELECT seqTest.nextVal FROM dual;

-- Maximum 초과 시 > ORA-08004: sequence SEQTEST.NEXTVAL exceeds MAXVALUE and cannot be instantiated

 

4. cache : 하드 디스크에 왔다갔따 하는 횟수를 줄이기 위해 사용

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

'DB > Oracle' 카테고리의 다른 글

[Oracle] UPDATE문, DELETE문  (1) 2024.03.18
[Oracle] INSERT문  (1) 2024.03.18
[Oracle] DDL  (0) 2024.03.18
[Oracle] 함수 :: 날짜 시간 함수(date time function)  (0) 2024.03.18
[Oracle] 함수 :: 형변환 함수(casting function)  (0) 2024.03.18

블로그의 정보

All of My Records

캐떠린

활동하기