인공지능/SQL

오라클 SQL - 시퀀스(Sequence) 사용하기

해피밀세트 2020. 2. 13. 19:29
반응형

 

시퀀스(Sequence)란 무엇인가?

 

  • 자동 일련번호를 생성하는 object이다.
  • create sequence 시스템 권한이 있어야 사용 가능하다.

시퀀스 생성 / 삭제 / 수정

 

1) 시퀀스 생성

간단 시퀀스 생성 :

create sequence id_seq;

select * from user_sequences;

 

구체적인 시퀀스 생성 :

create sequence id_seq
increment by 1  ------> 1증가 (기본값 : 1)
start with 1 -----------> 시작점 1 (기본값 : 1) 
maxvalue 100 ---------> 끝점 100 (기본값 : 10의 27승(무한)) 
nocache ---------------> 시퀀스를 미리 만들어 놓고 메모리에서 가져다 쓰지않겠다 (기본값 : 20개)
nocycle; ---------------> n번~nn번 반복하지 않겠다.

select * from user_sequences;

 

2) 시퀀스 삭제

시퀀스 통째로 삭제 :

drop sequence id_seq;

 

시퀀스로 만든 행 하나 삭제:

delete from emp_seq
where id = 1;

 

3) 시퀀스 수정

alter sequence id_seq
increment by 1
maxvalue 1000
cache 20
nocycle;

단, start with는 수정할 수 없다!


시퀀스 사용하기

 

우선 시퀀스를 사용할 테이블을 만든다. :

create table emp_seq
(id number, name varchar2(30),
day timestamp with time zone default systimestamp);

 

1) nextval

시퀀스 한 행 추가:

insert into emp_seq(id, name, day)
values(id_seq.nextval, user, default); -------> 시퀀스이름.nextval : 사용가능한 다음번호를 리턴

select * from emp_seq;

한번 더

insert into emp_seq(id, name, day)
values(id_seq.nextval, user, default);

select * from emp_seq;

다음 번호로 넘버링 되어있는 것을 확인할 수 있다.

rollback;

다시 한번 더

insert into emp_seq(id, name, day) 
values(id_seq.nextval, user, default); 

select * from emp_seq;

1번부터 다시 시작하는게 아니라 3번으로 넘버링되었다.

한번 생성한 번호는 재사용이 불가능하다.(cycle을 사용하지 않는 이상)

번호에 갭이 생길 있다는 걸 생각하며 사용해야 한다.

 

한번 더 실행

insert into emp_seq(id, name, day)
values(id_seq.nextval, user, default);

select * from emp_seq;

commit;

 

2) currval

select id_seq.currval from dual; ---------------------> 시퀀스이름.nextval  : 마지막 사용 번호를 리턴

주의할 점!!

다음 번호를 생성하고 조회하면 :

select id_seq.nextval from dual;

여기서 시퀀스 한 행을 더 추가 했을때 : 

insert into emp_seq(id, name, day)
values(id_seq.nextval, user, default);

select * from emp_seq;

이렇게 갭이 생기게 된다.

rollback;

반응형