시퀀스란(sequence)
- 자동적으로 유일 번호를 생성
- 공유 가능한 객체
- 주로 기본 키 값을 생성하기 위해 사용(시퀀스 값을 기본키 값으로 사용)
- 메모리에 캐쉬되면 시퀀스 값을 액세스 하는 효율성을 향상
- 트랜잭션의 커밋 또는 롤백과 상관없이 시퀀스는 증가한다.
- 12C 이상부터는 테이블 생성시 DEFAULT 값으로 시퀀스 값을 할당 할 수 있다.(오라클에서는 DEFAULT 안 주는것이 좋다)
- 게시판, 공지사항, 방명록(기본키를 만들 컬럼이 없다)
- 시퀀스 자체가 객체, ROLLBACK, COMMIT가 상관없이 생성시 값이 무조건 증가
- 권한이 없으면 시퀀스를 생성하지 못함(테이블을 만들 수 있으면 시퀀스를 만들 수 있다. 단 VIEW는 안됨)
CREATE SEQUENCE 시퀀스명
START WITH 시작값
INCREMENT BY 증가값
[ MINVALUE 최소값 | NOMINVALUE ]
[ MAXVALUE 최대값 | NOMAXVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE 캐시값 | NOCACHE ];
CREATE SEQUENCE depts_seq
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE;
START WITH: 시퀀스가 생성된 후 처음으로 반환할 값을 지정(기본값 1)
INCREMENT BY: 시퀀스 값이 증가하는 단위를 지정 수면 증가, 음수면 감소. (기본값은 1)
MINVALUE: 시퀀스가 가질 수 있는 최소값을 지정.
MAXVALUE: 시퀀스가 가질 수 있는 최대값을 지정.
CYCLE: 시퀀스가 최대값에 도달한 후 다시 시작값으로 돌아가도록 한다. NOCYCLE이면 최대값에 도달하면 더 이상 값을 생성하지 않는다.
CACHE: 메모리에 미리 시퀀스 값을 캐싱하여 성능을 향상시킨다. 기본값은 20이다. NOCACHE로 설정하면 캐싱 없이 시퀀스를 생성한다.
CREATE SEQUENCE test_seq; -- 시퀀스 옵션 없이 설정
-- 1부터 증가하는 시퀀스, 기본 캐시 20개
-- 기본 캐시 20개는 미리 20개의 시퀀스를 만들어 놓는다는 의미
-- 현재 시퀀스가 3인 상태에서 오라클 서버가 재실행되면 다음 시퀀스는 21
-- 10~20 까지 2씩 증가하는 시퀀스
CREATE SEQUENCE test_seq
INCREMENT BY 2
START WITH 10
MINVALUE 10
MAXVALUE 20
CACHE 5;
시퀀스가 20이 넘으면 0RA-08004

SELECT * FROM user_sequences;
SELECT * FROM seq;
SELECT object_name FROM user_objects
WHERE object_type = 'SEQUENCE';

시퀀스이름.NEXTVAL: 다음 시퀀스 값
시퀀스이름.CURRVAL: 현재 시퀀스 값
SELECT depts_seq.NEXTVAL FROM dual; -- 다음 시퀀스
SELECT depts_seq.CURRVAL FROM dual; -- 현재 시퀀스
ALTER SEQUENCE 시퀀스명
[ INCREMENT BY 증가값 ]
[ MAXVALUE 최대값 | NOMAXVALUE ]
[ MINVALUE 최소값 | NOMINVALUE ]
[ CYCLE | NOCYCLE ]
[ CACHE 캐시값 | NOCACHE ];
ALTER SEQUENCE depts_seq MAXVALUE 99999;
DROP SEQUENCE 시퀀스명;
DROP SEQUENCE depts_seq;