더북(TheBook)

시퀀스 생성

    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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.