시퀸스(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을 이용해 넘버링할 수 있습니다.
테이블에 삽입된 값을 보면 다음과 같이 잘 적용된 모습을 보입니다.
'Database > SQL' 카테고리의 다른 글
[Oracle/SQL] DECODE, CASE 조건문 (0) | 2021.12.09 |
---|---|
[Oracle/SQL] SUBSTR, INSTR 문자열 함수 (0) | 2021.12.08 |
[Oracle, SQL] NULL 제거하기 (0) | 2021.12.03 |
[Oracle, SQL] SELECT 문자 검색 (0) | 2021.12.02 |
[Oracle, SQL] SELECT 기본 문법, 컬럼 이름 변경, 컬럼 리터럴 추가 (0) | 2021.12.01 |
댓글