시퀀스 생성

        CREATE SEQUENCE [스키마명.]시퀀스명
        INCREMENT BY 증감숫자
        START WITH 시작숫자
        NOMINVALUE | MINVALUE 최솟값
        NOMAXVALUE | MAXVALUE 최댓값
        NOCYCLE | CYCLE
        NOCACHE | CACHE;
    

    INCREMENT BY 증감숫자: 증감숫자는 0이 아닌 정수. 양수이면 증가, 음수이면 감소. 디폴트 값은 1

    START WITH 시작숫자: 시작숫자의 디폴트 값은 증가일 때는 MINVALUE, 감소일 경우 MAXVALUE.

    NOMINVALUE: 디폴트 값으로 증가일 때 1, 감소의 경우 -(1027 -1).

    MINVALUE 최솟값: 최솟값은 시작숫자와 작거나 같아야 하고 MANVALUE보다 작아야 한다.

    NOMAXVALUE: 디폴트 값으로 증가일 때 1028-1, 감소의 경우 -1.

    MAXVALUE 최댓값: 최댓값은 시작숫자와 같거나 커야 하고 MINVALUE보다 커야 한다.

    NOCYCLE: 디폴트 값으로 최대나 최솟값에 도달하면 생성 중지.

    CYCLE: 증가는 최댓값에 도달하면 다시 최솟값부터 시작, 감소는 최솟값에 도달하면 다시 최댓값에서 시작.

    NOCACHE: 디폴트로 메모리에 시퀀스 값을 미리 할당해 놓지 않으며 디폴트 값은 20.

    CACHE: 메모리에 시퀀스 값을 미리 할당해 놓음.

    시퀀스를 만들어 보자.

    입력

        CREATE SEQUENCE my_seq1
        INCREMENT BY 1
        START WITH 1
        MINVALUE 1
        MAXVALUE 1000
        NOCYCLE
        NOCACHE;
    

    결과

        sequence MY_SEQ1이(가) 생성되었습니다.
    

     

    이 시퀀스는 1부터 시작해 1씩 증가하며 최솟값 1부터 최댓값 1000까지 순번을 자동 생성한다. 그럼 이 시퀀스로 ex2_8테이블의 col1 컬럼에 값을 입력해 보자.

    입력

        DELETE ex2_8;  -- 기존 데이터를 지운다.
    
        INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    입력

        INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    입력

        SELECT *
          FROM ex2_8;
    

    결과

        COL1       COL2
        ---------- ----------
        1
        2
    

     

    INSERT를 두 번 실행했으므로 col1 컬럼에 1, 2 값이 순차적으로 들어 갔다. 시퀀스명.NEXTVAL을 사용하면 해당 시퀀스에서 다음 순번 값을 자동으로 가져온다. 또한 시퀀스명.CURRVAL을 사용하면 해당 시퀀스의 현재 값을 알 수 있다.

    입력

        SELECT my_seq1.CURRVAL
          FROM DUAL;
    

    결과

        CURRVAL
        ----------
                2
    

     

    다시 한번 NEXTVAL로 값을 가져오면 3이 입력될 것이다.

    입력

        INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    입력

        SELECT *
          FROM ex2_8;
    

    결과

        COL1       COL2
        ---------- ----------
        1
        2
        3
    

     

    주의할 사항은 NEXTVAL을 사용하면 값이 계속 증가된다는 점이다. 즉 INSERT문이 아닌 SELECT문에서 사용하더라도 값이 증가된다.

    입력

        SELECT my_seq1.NEXTVAL
          FROM DUAL;
    

    결과

        NEXTVAL
        ----------
        4
    

    입력

        INSERT INTO ex2_8 (col1) VALUES ( my_seq1.NEXTVAL);
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    입력

        SELECT *
          FROM ex2_8;
    

    결과

        COL1       COL2
        ---------- ----------
        1
        2
        3
        5
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.