[Oracle] 오라클 시퀀스(Sequence) 사용법 총정리 (생성, 조회, 수정, 삭제)등

     

    시퀀스(Sequence)란?

    시퀀스란 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체입니다. 보통 PK값에 중복값을 방지하기위해 사용합니다. 예를들어 게시판에 글이 하나 추가될때마다 글번호(PK)가 생겨야 한다고 해보겠습니다. 만약 100번까지 글 번호가 생성되어있다면 그 다음 글이 추가가 되었을 경우 글 번호가 101으로 하나의 ROW를 생성해주어야 할것입니다. 이때 101이라는 숫자를 얻으려면 기존 글번호중 가장 큰 값에 +1을 하는 로직을 어딘가에 넣어야하는데 시퀀스를 사용하면 이러한 로직이 필요없이 데이터베이스에 ROW가 추가될때마다 자동으로 +1을 시켜주어 매우 편리합니다.

     

    시퀀스(Sequence) 생성

    --문법
    CREATE SEQUENCE [시퀀스명]
    INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1
    START WITH [시작숫자] -- 시작숫자의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE
    NOMINVALUE OR MINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -1028 
                                   -- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함
    NOMAXVALUE OR MAXVALUE [최대값] -- NOMAXVALUE : 디폴트값 설정, 증가일때 1027, 감소일때 -1
                                   -- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함
    CYCLE OR NOCYCLE --CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작 NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지
    CACHE OR NOCACHE --CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고 NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음
    --예제
    CREATE SEQUENCE EX_SEQ --시퀀스이름 EX_SEQ
    INCREMENT BY 1 --증감숫자 1
    START WITH 1 --시작숫자 1
    MINVALUE 1 --최소값 1
    MAXVALUE 1000 --최대값 1000
    NOCYCLE --순한하지않음
    CACHE; --메모리에 시퀀스값 미리할당

    시퀀스 생성

    위와같이 쿼리를 날리면 시퀀스가 생성됩니다. 위 예제를 설명하자면 이 시퀀스는 EX_SEQ라는 시퀀스이고 1부터 시작해 1씩 증가하며 시작값은 1부터 1000까지 순번을 자동하는 시퀀스입니다. Cache를 사용하여 시퀀스값의 액세스 효율이 Cache를 사용하지 않았을때보다 증가합니다. 

    ※ 위 쿼리를 조금만 변형하면 2씩 증가하는 시퀀스, 큰 수에서 작은수로 감소하는 시퀀스도 생성할 수 있습니다.

     

    시퀀스(Sequence) 사용 예시

    CREATE TABLE EX_TABLE (BOARD_NUM NUMBER(19,6) NOT NULL);
    

    1. 테스트 할 간단한 TEST 테이블을 만듭니다.

    INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);
    INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);
    INSERT INTO EX_TABLE(BOARD_NUM) VALUES(EX_SEQ.NEXTVAL);

    2. 위에서 만들었던 EX_SEQ 시퀀스로 TEST테이블에 데이터를 넣습니다.

    SELECT * FROM EX_TABLE
    

    3. 넣었던 데이터를 SELECT문으로 확인해봅니다.

     

    시퀀스 사용

    4. 위와같이 1, 2, 3이라는 값이 순차적으로 INSERT된것을 볼 수 있습니다. 시퀀스명.NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져옵니다.

     

    시퀀스(Sequence) 조회

    SELECT EX_SEQ.CURRVAL FROM DUAL --해당 시퀀스 값 조회
    SELECT * FROM USER_SEQUENCES  --전체 시퀀스 조회

    시퀀스 조회

     

    시퀀스(Sequence) 수정

    --문법
    ALTER SEQUENCE [시퀀스명]
    INCREMENT BY [증가값]
    NOMINVALUE OR MINVALUE [최솟값] 
    NOMAXVALUE OR MAXVALUE [최대값]
    CYCLE OR NOCYCLE [사이클 설정 여부]
    CACHE OR NOCACHE [캐시 설정 여부]
    --예제
    ALTER SEQUENCE EX_SEQ
    INCREMENT BY 2
    MINVALUE 2
    MAXVALUE 10000
    CYCLE
    NOCACHE;

    시퀀스는 DDL문이므로 ALTER문을 사용하여 수정이 가능합니다. 시작값은 수정이 불가능합니다. 그리고 현재 들어있는 값보다 높은 최솟값(감소 시퀀스일 경우 그 반대)로도 설정할 수 없습니다.

    시퀀스 수정

     

    시퀀스(Sequence) 삭제

    --문법
    DROP SEQUENCE [시퀀스명]
    
    --예제
    DROP SEQUENCE EX_SEQ

    시퀀스 삭제

    댓글

    Designed by JB FACTORY