[오라클/ORACLE] 시퀀스(SEQUENCE) - NEXTVAL | CURRVAL | 초기화

시퀀스(SEQUENCE)

시퀀스(sequence)는 순서에 따라 나열되는 정수의 목록이라고 정의할 수 있다. 또 유일한 값을 생성해주는 오라클의 객체다.

 

이게 무슨 말인가 싶지만 핵심을 기억하면 그리 이해하기 어려운 개념은 아니다. 핵심은 시퀀스를 생성함으로써 개발자는 기본키처럼(예: id number) 순차적으로 증가하는 칼럼을 헷갈리지 않고 손쉽게 insert 할수 있게 된다는 것이다.

 

간단한 예제를 통해 개념을 이해해보자. 사용법은

CREATE SEQUENCE 시퀀스명;

이다. 이제 item_seq라는 이름의 시퀀스를 만든다.

CREATE SEQUENCE item_seq;

시퀀스가 생성됐다.

NEXTVAL

NEXTVAL는 현재 시퀀스의 다음 값을 불러온다.

SELECT item_seq.NEXTVAL
FROM dual; -- dual은 오라클 자체에서 제공하는 테이블로 계산된 결과값을 확인할 때 사용됨

위 코드를 첫 번째로 실행하면

1이라는 값을 내놓는다. 같은 코드를 한 번 더 실행하면

 

NEXTVAL 값이 2로 늘어난다. 즉 기본적으로 NEXTVAL는 값을 1씩 증가시켜준다. 원하는 증감 값과 증감폭, 한계값 등이 있다면 시퀀스를 생성할 때 정할 수 있다. 

CREATE SEQUENCE item_seq
start with 1
increment by 1
MAXVALUE 10;
-- item_seq라는 시퀀스는 1부터 시작하고, 1씩 증가하며, 최대 10까지 생성 가능

이런 식으로 하면 된다.

CURRVAL

CURRVAL은 현재 시퀀스가 몇 번째에 있는지 알려주는 명령어다.

SELECT item_seq.CURRVAL
FROM dual;

 

위에서 실행한 NEXTVAL 값과 마찬가지로 2를 출력한다.

 

개념을 이해했으니 실제 테이블에 어떤 식으로 활용되는지 알아봐야 하는데, 그전에 시퀀스를 초기화하는 방법을 살펴보자.

초기화

시퀀스를 초기화하는 방법은 현재 시퀀스 값에서 초기화하고 싶은 만큼 값을 빼주면 된다.

ALTER SEQUENCE item_seq INCREMENT BY -1; 
-- ALTER로 시퀀스 수정
-- INCREMENT BY는 증감 단위. -1로 설정

SELECT item_seq .NEXTVAL FROM DUAL; 
-- 증감 단위(-1) 만큼 현재 시퀀스에서 더해짐

다시 증감 단위를 1로 바꿔준다.

ALTER SEQUENCE item_seq INCREMENT BY 1;

위 작업을 통해 앞서 만든 item_seq 시퀀스 값을 1로 초기화했다.

 

이제 테이블을 새로 생성하고 실제 INSERT문에서 시퀀스를 어떻게 사용하는지 살펴본다. 우선 간단하게 테이블을 생성한다.

CREATE TABLE items(
    item_id NUMBER
);

DROP TABLE items;

INSERT INTO items(item_id) VALUES(1); -- 직접 ID값 1 삽입
INSERT INTO items(item_id) VALUES(item_seq.NEXTVAL); -- NEXTVAL 이용
INSERT INTO items(item_id) VALUES(item_seq.NEXTVAL);-- NEXTVAL 이용

 

시퀀스를 이용하지 않았다면 item_seq.NEXTVAL자리에 직접 2, 3 등 숫자를 넣어줘야 했겠지만, 시퀀스를 이용해 좀더 확실하고 편리하게 값을 넣어줬다.


예제 출처: ORACLE TUTORIAL

반응형

댓글

Designed by JB FACTORY