SEQUENCE
자동 일련번호를 생성하는 오브젝트이다. 사용하기 위해서는 CREATE SEQUENCE 시스템 권한이 필요하다.
--테이블 생성
CREATE TABLE emp_seq
(id number,
name varchar2(20),
day timestamp DEFAULT systimestamp);
--시퀀스 생성
CREATE SEQUENCE emp_id_seq
INCREMENT BY 1
START WITH 1 --START WITH만 ALTER로 수정 불가 (바꾸려면 DROP 후 CREATE)
MAXVALUE 50 --최대 10^27까지 가능
CACHE 20 --성능때문에 나옴
NOCYCLE;
--시퀀스 확인
SELECT * FROM user_sequences WHERE sequence_name = 'EMP_ID_SEQ'; --LAST_NUMBER로 다음 번호를 유추하면 안된다.
--시퀀스 사용
INSERT INTO emp_seq(id , name, day)
VALUES(emp_id_seq.nextval, user, default); --nextval은 다음 사용 가능한 번호를 나타내는 가상 컬럼
SELECT emp_id_seq.currval FROM dual; --currval: 현재까지 사용한 번호를 RETURN해주는 가상 컬럼
한번 생성한 번호는 영구 결번으로 재사용이 불가하다. ROLLBACK
으로 INSERT 작업을 취소해도 사용한 번호는 또 사용하지 못한다. 그러므로 SEQUENCE 번호에 갭이 생길 수 있다. 또한 nextval
은 SELECT시 SEQUENCE가 생성되니, 번호를 확인할 때는 nextval
대신 currval
을 사용하자.