쌓고 쌓다

[Oracle] 시퀀스(SEQUENCE) 본문

프로그래밍/SQL

[Oracle] 시퀀스(SEQUENCE)

승민아 2022. 11. 27. 14:35

시퀀스

일련의 번호로 기본 키 값을 생성하는 객체.

여러 테이블에서 공유가능.

CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n]
[MINVALUE n]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];
  • INCREMENT BY n : 시퀀스 번호의 증가치 (기본:1)
  • START WITH n : 시퀀스 시작번호 (기본:1)
  • MAXVALUE n : 시퀀스 최대값
  • MINVALUE n : cycle로 지정한 경우, MAXVALUE에 도달한 후 새로 시작하는 시퀀스 값
  • CYCLE or NOCYCLE : MAXVALUE 또는 MINVALUE에 도달한 후 순환 생성 여부
  • CACHE n OR NOCACHE : 시퀀스 생성 속도 개선을 위해 캐쉬하는 시퀀스 개수 

EX)

-- 시작 번호는 1, 증가치는 1, 최대 값은 2인 s_seq 시퀀스를 생성
CREATE SEQUENCE s_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 2;

-- 시퀀스 정보 확인
SELECT min_value, max_value, increment_by, last_number
FROM user_sequences
WHERE sequence_name='S_SEQ';

시퀀스 정보

 

CURRVAL & NEXTVALUE

CURRVAL : 시퀀스에서 생성된 현재 번호 확인

NEXTVAL : 시퀀스에서 다음 번호 생성

=> INSERT, UPDATE문에서 사용

sequence_name.CURRVAL
sequence_name.NEXTVAL

 

EX)

-- s_seq의 현재 값과 다음 값을 확인
SELECT s_seq.CURRVAL FROM DUAL;

에러 발생

=> 시퀀스를 생성하고 NEXTVAL 값을 생성하지 않으면 CURRVAL 값 조회시 에러 발생

 

SELECT s_seq.NEXTVAL FROM DUAL;
select s_seq.CURRVAL FROM DUAL;

+ 아래의 쿼리를 계속 수행하여 MAXVALUE를 넘길 순 없다.

SELECT s_seq.NEXTVAL FROM DUAL;

 

 

시퀀스를 이용한 기본 키 생성

-- 학생 테이블에서 시퀀스 값을 이용하여 기본 키 값을 생성하여 입력
ALTER SEQUENCE s_seq MAXVALUE 200; -- 이전의 s_seq 시퀀스의 최대값 변경

INSERT INTO student(studno, name, deptno)
VALUES (s_seq.NEXTVAL, '홍길동', 101);

 

시퀀스 정의 변경

ALTER SEQUENCE sequence_name
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];

 

EX)

-- s_seq 시퀀스의 최대 값을 200으로 변경
ALTER SEQUENCE s_seq MAXVALUE 200;

 

시퀀스 삭제

DROP SEQUENCE sequence_name;

 

EX)

-- s_seq 시퀀스 삭제
DROP SEQUENCE s_seq;
Comments