반응형

Oracle 로고

오라클(Oracle)에서 테이블을 생성하고 데이터를 INSERT 할 때, 번호를 채번하여 각 데이터들을 구분할 수 있는 PK로 많이 사용하곤 한다. 근데, 오라클에서는 자동 증가 컬럼이 없어 다른 DB와는 좀 다른 문제가 있다. 이번 글에서는 오라클에서 시퀀스 생성하는 방법에 대해 기록한다.


목차

1. 시퀀스(SEQUENCE) 구조
2. 시퀀스(SEQUENCE) 생성 방법
3. 시퀀스(SEQUENCE) 사용 예제
4. 시퀀스(SEQUENCE) 수정하는 방법
5. 시퀀스(SEQUENCE) 삭제하는 방법

1. 시퀀스(SEQUENCE) 구조

시퀀스(SEQUENCE)의 구조는 아래와 같다.

CREATE SEQUENCE YG.SEQ_TEST #1 스키마명, 시퀀스명
START WITH 21 #2 시작값
INCREMENT BY 1 #3 증가값
MINVALUE 1 #4 최소값
MAXVALUE 10000000000000000000 #5 최대값
NOCYCLE #6 시퀀스 번호가 MAXVALUE까지 도달하면 다시 시작값으로 돌아갈건지에 대한 여부
CACHE 20 #7 쿼리를 실행하여 번호를 가져올 것인지, 캐시에 저장하여 가져올 것인지에 대한 여부
NOORDER #8 요청 순서에 따라 시퀀스 번호 채번 설정 여부

 

#1 : DB의 스키마명.시퀀스(SEQUENCE) 명

#2 : 시퀀스(SEQUENCE)의 시작 값

#3 : 시퀀스(SEQUENCE) 번호 채번 시 증가 값 설정(여기서, 시퀀스가 감소할 경우에는 마이너스를 붙이면 된다.)

#4 : 시퀀스(SEQUENCE) 최소값

#5 : 시퀀스(SEQUENCE) 최대값

#6 : 시퀀스(SEQUENCE) 번호가 MAXVALUE까지 도달하면 다시 시작값으로 돌아갈건지에 대한 여부

#7 : 시퀀스(SEQUENCE) 번호를 채번할 때, 쿼리를 실행할 건지, CACHE에 저장하여 바로 가져올 것인지에 대한 여부

       뒤의 숫자는 현재 시퀀스 번호 + 숫자 만큼 캐시에 저장하여 채번 시 전자보다 속도가 더 빠르다.

#8 : 요청 순서에 따라 시퀀스(SEQUENCE) 번호를 채번할건지에 대한 것을 설정 여부

       ORDER 사용 시 시스템에 부하가 생겨 속도 저하.

 

2. 시퀀스(SEQUENCE) 생성 방법

시퀀스(SEQUENCE)를 생성하는 방법은 정말 간단하다.

위의 1번 시퀀스 구조에 나온 틀을 가지고 이름과 파라미터만 바꿔서 쿼리를 실행하면 된다.

CREATE SEQUENCE YG.SEQ_TEST #1 스키마명, 시퀀스명
START WITH 21 #2 시작값
INCREMENT BY 1 #3 증가값
MINVALUE 1 #4 최소값
MAXVALUE 10000000000000000000 #5 최대값
NOCYCLE #6 시퀀스 번호가 MAXVALUE까지 도달하면 다시 시작값으로 돌아갈건지에 대한 여부
CACHE 20 #7 쿼리를 실행하여 번호를 가져올 것인지, 캐시에 저장하여 가져올 것인지에 대한 여부
NOORDER #8 요청 순서에 따라 시퀀스 번호 채번 설정 여부

 

3. 시퀀스(SEQUENCE) 사용 예제

시퀀스의 사용 방법은 아래와 같다.

SELECT YG.SEQYG.NEXTVAL
  FROM DUAL

 

현재 시퀀스 번호 확인하는 방법

SELECT YG.SEQYG.CURRVAL
  FROM DUAL

 

여기서, CURRVAL을 실행을 할 때 아래와 같이 에러가 발생한 경우가 생긴다.

ORA-08002: 시퀀스 YG.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

 

이 경우에는 DB에 접속해 있는 세션에서 NEXTVAL을 1번이라도 한 상태에서만 사용할 수 있다.

아무것도 하지 않았을 때 위의 쿼리를 실행하면 에러가 발생한다.

 

4. 시퀀스(SEQUENCE) 수정하는 방법

시퀀스(SEQUENCE)를 수정하는 방법은 아래와 같다.

ALTER SEQUENCE [시퀀스명] [수정할 내용]

 

시퀀스를 수정하는 것들의 요인은 INCREMENT BY 1, MINVALUE 1, MAXVALUE 10000000000000000000, NOCYCLE 
CACHE 20, NOORDER 등을 바꿀 수 있다.

 

ALTER SEQUENCE INCREMENT BY 1
ALTER SEQUENCE MINVALUE 1
ALTER SEQUENCE MAXVALUE 10000000000000000000

 

위와 같은 방법으로 바꿀 수 있다.

근데 여기서 중요한 것은 START WITH는 변경이 불가하다.

START WITH는 시퀀스를 생성할 때 가장 처음에 설정하는 초기값이라 이 속성에 대해서는 변경이 안된다.

 

5. 시퀀스(SEQUENCE) 삭제하는 방법

시퀀스(SEQUENCE)를 삭제하는 방법은 아래와 같다.

DROP SEQUENCE [시퀀스명]

 

시퀀스를 삭제하는 방법은 위와 같이 DROP SEQUENCE를 사용하여 삭제를 하면 된다.


 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기