시퀀스란

1) 오라클에서 자동으로 증가되는 숫자를 만들어주는 객체이다.

2) 유일(unique)한 값을 생성해 주는 오라클의 객체이다.

3) 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.

4) 보통 primary key 값으로 지정하여 사용한다(유일무이)

5) 일반적으로 sequence는 테이블과는 독립적으로 생성되어, 하나의 sequence를 여러 테이블에서 사용할 수 있다.

1. 생성방법

CREATE SEQUENCE [시퀀스명]

START WITH [시작 숫자] INCREMENT BY [증가되는 숫자]

MAXVALUE [N] | NOMAXVALUE

MINVALUE [N] | NOMINVALUE

CYCLE | NOCYCLE

1) start with : 시퀀스의 시작값을 지정한다. 값을 지정 하면 그 값을 시작으로 순차적으로 증가한다

2) increment by : 시퀀스를 얼마씩 증가 시킬 건지 정하는 부분이다. ex) 2라고 지정하면 2씩 증가한다.

3) maxvalue n | nomaxvalue

- maxvalue n : 시퀀스가 증가 할 수 있는 최대값을 말한다.

- nomaxvalue : 시퀀스의 값을 무한대로 지정한다.


4) minvalue n | nominvalue

- minvalue n : 시퀀스의 최소값을 지정한다. 기본값은 1이다.

- nominvalue를 지정할 경우 최소값은 무한대가 된다.

5) cycle : 최대값이 넘으면 다시 처음으로 돌아가 순환한다

2. 시퀀스 옵션

1) 현재 사용 되고 있는 모든 시퀀스의 이름을 조회 해 보자

SELECT* FROM USER_SEQUENCES

2) 하나의 시퀀스의 값을 반환하는 방법은 다음과 같다

CURRVAL : 현재 값을 반환 합니다.
NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.

ex) SELECT temp_seq.CURRVAL FROM DUAL

SELECT temp_seq.NEXTVAL FROM DUAL

3) 사용규칙


** NEXTVAL, CURRVAL을 사용할 수 있는 경우
- subquery가 아닌 select문
- insert문의 select절
- insert문의 value절
- update문의 set절


** NEXTVAL, CURRVAL을 사용할 수 없는 경우
- view의 select절
- distinct 키워드가 있는 select문
- group by, having, order by절이 있는 select문
- select, delete, update의 subquery
- create table, alter table 명령의 default값

3. 시퀀스의 수정
ALTER SEQUENCE [시퀀스 이름]
INCREMENT BY [N]
MAXVALUE [N] | NOMAXVALUE
MINVALUE [N] | NOMINVALUE
CYCLE | NOCYCLE
START WITH는 수정할수 없습니다.
4. 시퀀스의 삭제
DROP SEQUENCE temp_seq;
3. 예제
1) 시작 값이 1이고 1씩 증가하며, 최대값이 1000 이 되는 시퀀스를 생성해 보자
create sequence temp_seq
start with 1
increment by 1
maxvalue 1000
2) 임시의 테이블에 insert를 할때 사용 방법
INSERT INTO emp(empno, ename, hiredate ) VALUES(temp_seq.NEXTVAL, 'test', sysdate);