코딩항해기

[DBMS/Oracle] 시퀀스 SEQUENCE 본문

DBMS/Oracle

[DBMS/Oracle] 시퀀스 SEQUENCE

miniBcake 2024. 7. 7. 11:14

 

시퀀스 (SEQUENCE)

오라클에서 중복되지 않는 값들을 자동적으로 순차적으로 생성하는 것.

보통 PK값에 중복값을 방지하기 위해 사용한다.

 

 

시퀀스 생성

추가 설정없이 기본 설정으로 생성할 경우

CREATE SEQUENCE 시퀀스명; 

 

추가 설정을 포함한 문법

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보다 커야함
CREATE SEQUENCE 시퀀스명
INCREMENT BY 1 --증감숫자 1
START WITH 1 --시작숫자 1
MINVALUE 1 --최소값 1
MAXVALUE 9999999999 --최대값 
NOCYCLE --순한하지않음
NOCACHE;

*nocache 설정을 넣어야 기본 캐시 설정이 사라져, 오래 sequence를 사용하지 않았을 때 값이 순차적으로 들어오지 않고 캐시된 숫자만큼 건너 뛰어버리는 현상을 방지할 수 있다.

 

시퀀스 삭제

DROP SEQUENCE 시퀀스명;

 

 

시퀀스 사용

시퀀스명.NEXTVAL
--시퀀스 명 : SEQ_MEMBER

INSERT INTO TBL_MEMBER
VALUES(SEQ_MEMBER.NEXTVAL, '홍길동', 22, '010-1234-1234', '서울시');

INSERT INTO TBL_MEMBER
VALUES(SEQ_MEMBER.NEXTVAL, '짱구', 22, '010-1234-5678', '서울시')

 

 

시퀀스 값 수정 문법

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

 

시퀀스 값 조절하기

시퀀스의 현재값 확인

SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '시퀀스명';

 

 

시퀀스의 증가값 변동

ALTER SEQUENCE 시퀀스명 INCREMENT BY -3; -- -3씩 증가함

 

 

다음값으로 증가값만큼의 처리

SELECT 시퀀스명.NEXTVAL FROM DUAL;

 

 

현재값을 확인

SELECT 시퀀스명.CURRVAL FROM DUAL;

 

 

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

[DBMS/Oracle] 데이터 모델링  (0) 2024.07.08
[DBMS/Oracle] 식별자  (0) 2024.07.08
[DBMS/Oracle] 무결성  (0) 2024.06.24
[DBMS/Oracle] 시퀀스, 집계함수(GROUP BY, HAVING)  (0) 2024.06.21
[DBMS/Oracle] 테이블 쿼리문 (DDL) 기초  (0) 2024.06.16