• [Oracle] 오라클의 시퀀스(Sequence)

    2022. 3. 10.

    by. 개발도비

    2021.8.19 작성

     

    시퀀스(Sequence)

    -유일한 값(UNIQUE)을 생성해주는 오라클 객체

    -일련번호, 자동증가 값을 생성한다

    -테이블과는 독립적으로 동작하기 때문에 하나의 시퀀스를 여러 테이블에서 사용할 수 있다

    -메모리에 Cache하면 시퀀스값의 액세스 효율이 증가한다 

    -Primary key값을 생성하기 위해 많이 사용한다(숫자 자동으로 증가시켜 중복이 안 되는 고유값으로 사용)

    -시퀀스 객체를 통해 순서대로 번호를 만들 수 있기 때문에 회원번호, 게시글 번호 등으로 활용할 수 있다

     

    시퀀스 생성하기 (편의상 시퀀스 이름은 NAME으로 명명한다)

    create SEQUENCE NAME
    [START WITH 시작번호]
    [INCREMENT BY 증가단위]
    [MAXVALUE 최대값] -- 디폴트 값 1028-1, 최댓값 무한대로 설정
    [MINVALUE 최소값] -- 디폴트 값 1, 최솟값 무한대로 설정
    [CYCLE | NOCYCLE]  -- CYCLE: 최댓값 또는 최솟값의 도달 시 순환여부 설정
    [CACHE | NOCACHE] -- CACHE: 메모리에 시퀀스 값의 할당 여부 설정

    시퀀스 이름을 제외한 나머지는 생략이 가능하다 

    CYCLE | NOCYCLE은 시퀀스가 최댓값 혹은 최솟값이 되었을 때 시작값으로 돌아갈지 여부에 대한 설정이다.

    순환여부 설정할 때 시퀀스+현재날짜를 조합하는 경우도 많다고 한다. 

     

    오라클을 기준으로 기본값은 다음과 같다

    START WITH 1

    INCREMENT BY 1

    MAXVALUE (오라클 버전 내 최대값)

    MINVALUE 1

    NOCYCLE 

    CACHE 20 

     

    시퀀스 수정하기

    ALTER SEQUENCE NAME
    [INCREMENT BY 증가단위]
    [MAXVALUE 최대값]
    [MINVALUE 최소값]
    [CYCLE | NOCYCLE]
    [CACHE | NOCACHE]

    START WITH는 수정이 불가능하다

     

    시퀀스 조회 및 추출

    SELECT * FROM NAME;
    
    NAME.NEXTVAL        -- 시퀀스 번호 추출
    NAME.CURRVAL        -- 현재 시퀀스 번호 확인

    NEXTVAL과 CURRVAL은  

    서브쿼리가 아닌 select문, insert문의 select절, insert문의 value절, update문의 set절에서 사용할 수 있다

     

    다음의 상황에서는 사용이 불가능하다

    - view의 select절

    - distinct 키워드가 있는 select문

    - group by, having, order by절이 있는 select문

    - select, delete, update의 서브쿼리

    - create table, alter table 명령의 default값 

     

    시퀀스 삭제하기

    DROP SEQUENCE NAME;

     

     

    References 오라클시퀀스 사용법 https://mine-it-record.tistory.com/62

    댓글