ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - 시퀀스(SEQUENCE)
    DataBase/Oracle 2022. 1. 28. 01:26
    728x90
    반응형

     

    시퀀스(SEQUENCE) 란?

     

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

     

     

     

    SEQUENCE 생성

     

    시작 값 : 300, 증가치 : 5, 최댓값 : 310

    300 -> 305 -> 310 -> 오류

    CREATE SEQUENCE SEQ_EMPID
    START WITH 300
    INCREMENT BY 5
    MAXVALUE 310
    NOCYCLE
    NOCACHE;

     


     

    SEQUENCE 사용

     

    • CURRVAL : 해당 시퀀스가 가지고 있는 CURRENT VALUE (현재 값)
    • NEXTVAL : 해당 시퀀스가 가질 다음 값 리턴
    • NEXTVAL를 최소 1회 수행해야 CURRVAL를 알아올 수 있다.
    • SELECT문에서 사용 가능
    • INSERT문 SELECT 구문에서 사용 가능
    • INSERT문 VALUES 절에서 사용 가능(게시글 PK로 사용)
    • UPDATE문 SET절에서 사용 가능

     

    -- 오류 발생, 최소 1번 NEXTVAL를 수행해야 현재값을 가져올 수 있다.
    SELECT SEQ_EMPID.CURRVAL FROM DUAL;
    
    SELECT SEQ_EMPID.NEXTVAL FROM DUAL; --300
    SELECT SEQ_EMPID.CURRVAL FROM DUAL; --300
    SELECT SEQ_EMPID.NEXTVAL FROM DUAL; --305
    SELECT SEQ_EMPID.CURRVAL FROM DUAL; --305
    SELECT SEQ_EMPID.NEXTVAL FROM DUAL; --310
    SELECT SEQ_EMPID.NEXTVAL FROM DUAL; --MAXVALUE를 넘어서면 에러 발생

     

    SEQUENCE 사용 못하는 곳

     

    • 서브쿼리의 SELECT문에서 사용 불가
    • VIEW의 SELECT절에서 사용 불가
    • DISTINCT 키워드가 있는 SELECT문에서 사용 불가
    • GROUP BY, HAVING절이 있는 SELECT문에서 사용 불가
    • ORDER BY절에서 사용 불가
    • CREATE TABLE, ALTER TABLE의 DEFAULT값으로 사용 불가

     

     


     

    SEQUENCE 변경

     

    ALTER SEQUENCE SEQ_EMPID
    INCREMENT BY 10
    MAXVALUE 400
    NOCYCLE
    NOCACHE;

     

     

    SEQUENCE 사용 예시

     

    CREATE SEQUENCE SEQ_EID
    START WITH 300
    INCREMENT BY 1
    MAXVALUE 10000
    NOCYCLE
    NOCACHE;
    
    INSERT
      INTO EMPLOYEE A
    (
      A.EMP_ID, A.EMP_NAME, A.EMP_NO, A.EMAIL, A.PHONE
    , A.DEPT_CODE, A.JOB_CODE, A.SAL_LEVEL, A.SALARY, A.BONUS
    , A.MANAGER_ID, A.HIRE_DATE, A.ENT_DATE, A.ENT_YN
    )  
    VALUES
    (
      SEQ_EID.NEXTVAL, '홍길동', '666666-6666666', 'hong_gd@greedy.com', '01012341234'
    , 'D2', 'J7', 'S1', 5000000, 0.1
    , 200, SYSDATE, NULL, DEFAULT
    );

     

     

     

     

     

     

     

    728x90
    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    SQL - 동의어(SYSNONYM)  (0) 2022.01.28
    SQL - 인덱스(INDEX)  (0) 2022.01.28
    SQL - VIEW, VIEW 옵션  (0) 2022.01.28
    SQL - DDL(Data Definition Language)의 ALTER, DROP  (0) 2022.01.27
    SQL - TCL (Transaction Control Language)  (0) 2022.01.27

    댓글

Designed by Tistory.