[Oracle]시퀀스 생성 및 사용법 정리

Yu River·2022년 6월 14일
0

오라클 시퀀스 생성

1) 시퀀스 생성 문법

CREATE SEQUENCE [시퀀스명]
INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1
START WITH [시작숫자] -- 시작숫자의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE
NOMINVALUE OR MINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -10^28 
                               -- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함
NOMAXVALUE OR MAXVALUE [최대값] -- NOMAXVALUE : 디폴트값 설정, 증가일때 10^27, 감소일때 -1
                               -- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함

2) 시퀀스 생성 예제

  • 다음 시퀀스는 WDRL_SEQ라는 이름을 가진 시퀀스이고 1부터 시작해 1씩 증가하며 시작값은 1부터 무한대(10^27)까지 순번이 매겨지는 시퀀스이다.
CREATE SEQUENCE WDRL_SEQ --시퀀스이름 WDRL_SEQ
INCREMENT BY 1 --증감숫자 1
START WITH 1 --시작숫자 1
MINVALUE 1 --최소값 1
MAXVALUE 9999999999 --최대값 
NOCYCLE --순한하지않음
NOCACHE; --메모리에 시퀀스값 미리할당

3) 시퀀스 값 조회하기

SELECT WDRL_SEQ.CURRVAL FROM DUAL;

시퀀스 생성 후 값을 사용하는데 다음과 같은 에러가 발생했다.

SQL Error [8002][72000]: ORA-08002: 시퀀스 WDRL_SEQ.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다.

발생 원인

  • 시퀀스의 NETVAL 보다 먼저 CURRVAL이 호출되었기 때문이다. 따라서 NEXTVAL이 먼저 실행되어야 CURRVAL을 실행할 수 있다고 한다.!

4) 시퀀스 값 사용하기

INSERT INTO EMP (COL1) VALUES(WDRL_SEQ.NEXTVAL);

5) 시퀀스 값 수정 문법

ALTER SEQUENCE [시퀀스명]
INCREMENT BY [증가값]
NOMINVALUE OR MINVALUE [최솟값] 
NOMAXVALUE OR MAXVALUE [최대값]
CYCLE OR NOCYCLE [사이클 설정 여부]
CACHE OR NOCACHE [캐시 설정 여부];

6) 시퀀스 값 수정 예시

ALTER SEQUENCE WDRL_SEQ
INCREMENT BY -2
MINVALUE 1
MAXVALUE 99999
CYCLE
NOCACHE;

⭐️ 7) 시퀀스 값 조절하기

  1. 시퀀스의 현재값 확인
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'WDRL_SEQ';
  1. 시퀀스의 증가값 변동
ALTER SEQUENCE WDRL_SEQ INCREMENT BY -3;
  1. 다음값으로 증가값만큼의 처리
SELECT WDRL_SEQ.NEXTVAL FROM DUAL;
  1. 현재값을 확인
SELECT WDRL_SEQ.CURRVAL FROM DUAL;
  1. 시퀀스의 증가값 변동 (원상복구)
ALTER SEQUENCE WDRL_SEQ INCREMENT BY 1;
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글