ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - SEQUENCE
    데이터베이스/Oracle 2020. 11. 28. 01:46
    728x90
    반응형

    SEQUENCE

    SEQUENCE란 순차적으로 정수 값을 자동으로 생성하는 객체자동 번호 발생기 역할을 한다.

    게시판 넘버나 회원번호 같은 곳에 많이 사용된다.

     

    표현식은 이러하다.

     

    각 설명은 아래와 같다.

     

    - START WITH : 처음 발생시킬 시작 값, 기본값 1

    - INCREMENT BY : 다음 값에 대한 증가치, 기본값 1

    - MAXVALUE | NOMAXVALUE : 발생시킬 최대값, 10의 27승-1까지 가능

    - MINVALUE | NOMINVALUE : 발생시킬 최소값, -10의 26승

    - CYCLE | NOCYCLE : 시퀀스가 최대값까지 증가 완료 시 CYCLE은 START WITH 설정 값으로 돌아간다 NOCYCLE은 에러 발생이다.

    - CACHE | NOCACHE : CACHE는 메모리 상에서 시퀀스 값을 관리한다. 기본값은 20이다. 캐쉬 메모리 크기를 지정한다.

     

    시퀀스의 캐쉬메모리는 할당된 크기 만큼 미리 다음 값을 생성해서 저장해둔다.

    다음 시퀀스 호출 시 저장된 값을 반환하므로 속도가 빠르다.(DB속도 향상)

     

     

    NEXTVAL / CURRCAL

    NEXTVAL이란 시퀀스 값을 INCREMENT 값 만큼 증가시킨 값을 반환한다.

    CURRVAL이란 현재 생성된 시퀀스 값을 반환한다.

     

    SELECT SEQ_EMP_ID.NEXTVAL FROM DUAL; -- 초기값 300 호출
    SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 300 호출
    SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 305 호출
    SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 310 호출
    SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 에러(최대값 초과)

     

     

     

     

    NEXTVAL / CURRCAL 사용 가능 여부

    사용 가능 여부는 이러하다.

     

    사용 가능한 경우

    - 메인쿼리(서브쿼리가 아닌 SELECT문)의 SELECT
    - INSERT문의 서브쿼리 SELECT
    - INSERT문의 VALUES
    - UPDATE문의 SET


    사용 불가능한 경우
    - VIEWSELECT
    - DISTINCT가 있는 SELECT
    - GROUP BY, HAVING, ORDER BY절이 포함된 SELECT
    - SELECT, DELETE, UPDATE문의 서브쿼리
    - CREATE TABLE, ALTER TABLEDEFAULT 값

     

    [ SEQUENCE 예시 ]

    CREATE SEQUENCE SEQ_EMPID
    START WITH 300 -- 시작값
    INCREMENT BY 5 -- 증가값
    MAXVALUE 310 -- 최대값
    NOCYCLE -- 반복
    NOCACHE;

     

     

    SEQUENCE 수정

    시퀀스 수정 시 CREATE에 사용한 옵션을 변경이 가능하다.

    START WITH 값 변경은 불가하기 때문에 변경하려면 삭제 후 다시 생성해야 한다.

     

    [ 작성법 ]

    ALTER SEQUENCE 시퀀스명
    [INCREMENT BY 정수] - 다음 값에 대한 증가치, 생략 시 기본 값 1로 지정.
    [MAXVALUE | NOMAXVALUE] - 발생시킬 최대값을 지정(10^27-1 == 0이 27개인 수 - 1), NOMAXVALUE 기본 값
    [MINVALUE | NOMINVALUE] - 발생시킬 최소값을 지정(-10^26 == 0이 26개인 수), NOMINVALUE 기본 값
    [CYCLE | NOCYCLE] - 값 순환 여부를 지정, NOCYCLE 기본 값 
    [CACHE | NOCACHE] - 캐쉬메모리 크기 지정. 

     

    [START WITH] 를 제외하고 생성과 동일하다.

     

    삭제는 DROP SEQUENCE 시퀀스명; 으로 한다.

     

    [ SEQUENCE 변경 예시 ]

    ALTER SEQUENCE SEQ_EMPID
    INCREMENT BY 10
    MAXVALUE 400
    NOCYCLE
    NOCACHE;
    728x90
    반응형

    '데이터베이스 > Oracle' 카테고리의 다른 글

    Oracle - SYNONYM  (0) 2020.11.28
    Oracle - INDEX  (0) 2020.11.28
    Oracle - View  (0) 2020.11.23
    Oracle - DDL (Data Definition Language) ALTER, DROP - Part 3  (0) 2020.11.22
    Oracle - DML(Data ManipulationLanguage) DELETE - Part 3  (0) 2020.11.20
Designed by Tistory.