본문 바로가기
Database/SQL

[Oracle/SQL] 시퀸스(Sequence)와 초기화하는 방법

by LasBe 2022. 2. 21.
반응형

시퀸스(Sequence)


시퀸스는 유일한 값을 생성해주는 오라클의 객체로서 순서대로 나열되는 정수의 목록입니다.

 

테이블에 넣는 데이터들에게 순서대로 번호 값을 매기는 칼럼에 사용하기 좋습니다.

 

 

 

시퀸스 사용법


- 시퀸스 생성

create sequence 시퀀스명;

간단히 create sequence를 이용해 시퀸스를 생성할 수 있습니다.

 

 

- NEXTVAL

select 시퀸스명.nextval from dual;

nextval을 사용하면 시퀸스의 다음 값을 불러옵니다.

 

create sequence seq;
select seq.nextval from dual;

이를 이용해 seq라는 시퀸스를 만들고 다음 값을 불러와봤습니다.

 

시퀸스를 생성한 뒤 처음 nextval을 실행한 결과는 다음과 같이 1을 출력합니다.

 

자바에서 SQL을 사용할 때 마찬가지로 다음과 같이 시퀸스명.nextval을 사용할 수 있습니다.

 

저는 실제로 게시판에 사용하는 데이터베이스에 boardseq라는 이름의 시퀸스를 만들어 사용해봤습니다.

String sql = 
    "insert into board " 
    +"values(boardseq.nextval, ?,?,?,?,?,?, sysdate, ?,0,?,?,?)";

 

 

- CURRVAL

select 시퀸스명.currval from dual;

currval을 사용하면 시퀸스가 현재 몇 번째 값인지 출력합니다.

 

위에서 생성한 seq 시퀸스에 currval을 사용하니 다음과 같이 출력해주었습니다.

 

- 시퀸스 증감 단위 수정

alter sequence 시퀸스명 increment by 증감할_수치;
-- 증감 수치는 음수도 가능합니다.

이 sql문을 이용한다면 한번에 얼마나 시퀸스를 증감할지 설정할 수 있습니다.

 

시퀸스를 감소시킬 수 있다는 점에서 시퀸스를 다시 생성하지 않고도 기존 값으로 초기화 할 수 있습니다.

 

 

 

시퀸스 초기화


위에서 알아본 시퀸스의 기능들로 사용하고 있는 시퀸스를 초기화해보겠습니다.

 

순서는 다음과 같습니다.

1. 시퀸스의 현재 값 확인

2. 시퀸스의 증감 값을 -(현재 값 - 1)으로 설정

3. nextval로 감소 값을 시퀸스에 적용

4. 시퀸스의 증감 값을 사용하던 값으로 되돌리기

5. 시퀸스를 0으로 설정할 수 없기에 처음 데이터에 1번 값을 삽입

6. 다음 값부턴 시퀸스의 nextval을 이용해 넘버링

 

-- 1. 현재 값 확인
select seq.currval from dual;

-- 2. -(현재 값)으로 증감 값 변경
alter sequence seq increment by -50;

-- 3. 변경 값 적용
select seq.nextval from dual;

-- 4. 기존 값으로 증감 값 변경
alter sequence seq increment by 1;

-- 5. 1번 값을 직접 삽입
create table test(num number);
insert into test(num) values(1);

-- 6. 이 후 nextval을 이용해 넘버링
insert into test(num) values(seq.nextvalue);

 

적용

(1)

select seq.currval from dual;

currval로 현재 값을 확인해보니 51이 출력되었습니다.

 

(2)

alter sequence seq increment by -50;

시퀸스의 값을 0으로 만들면 오류가 발생하기 때문에 값을 1로 만들어 주어야합니다.

 

기존의 값이 51이기 때문에 -50으로 증감 값을 변경하겠습니다.

 

(3)

select seq.nextval from dual;

변경 값을 적용시킵니다.

 

시퀸스의 값이 51에서 1로 잘 적용된 것을 볼 수 있습니다.

 

(4)

alter sequence seq increment by 1;

-50이었던 시퀸스의 증감 값을 기존의 값으로 적용시킵니다.

 

(5)

create table test(num number);
insert into test(num) values(1);

시퀸스를 0으로 만들수도 없고,

시퀸스의 nextval을 적용하면 2가 삽입되기 떄문에 초기 값을 직접 넣어줍니다.

 

(6)

insert into test(num) values(seq.nextvalue);
insert into test(num) values(seq.nextvalue);
insert into test(num) values(seq.nextvalue);

select * from test;

초기 값을 넣어주었다면 이제 시퀸스의 nextval을 이용해 넘버링할 수 있습니다.

 

테이블에 삽입된 값을 보면 다음과 같이 잘 적용된 모습을 보입니다.

 

반응형

댓글


오픈 채팅