• Home
  • About
    • DEOKHEE LEE photo

      DEOKHEE LEE

      Data science archive

    • Learn More
    • Email
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Categories
    • All Tags
  • Projects

[SQL] SEQUENCE

21 Jul 2018

Reading time ~1 minute

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을 사용하자.



sql, sequence sql Share Tweet +1