시퀀스(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;
'컴퓨터 > SQL' 카테고리의 다른 글
오라클 SQL - ROWID와 INDEX (0) | 2020.02.16 |
---|---|
오라클 SQL - Data 처리 방법 (0) | 2020.02.14 |
오라클 SQL - 뷰(VIEW) 사용하기 (0) | 2020.02.13 |
오라클 SQL - CMD에서 CSV파일 만들기 (0) | 2020.02.12 |
오라클 SQL - External Table 연습 (0) | 2020.02.11 |