ORACLE SQL

ORACLE SQL SEQUENCE

최종군 2024. 7. 29. 20:04

 

 * 시퀀스 (SEQUENCE)

 : 자동으로 번호를 발생 시켜주는 역할을 하는 객체 

  정수를 순차적으로 일정한 값마다 증가시키면서 생성 

 

시퀀스 생성하기 :

 

시퀀스객체

 

START WITH 숫자 --> 처음 발생 시킬 시작 값 지정 

INCREMENT BY 숫자 --> 얼마만큼씩 증가시킬 것인지에 대한 값 지정[기본값 : 1]

MAXVALUE 숫자 --> 최대값 [기본값 엄청 큼]

MINVALUE 숫자 --> 최소값 [기본값 : 1]

CYCLE || NOCYCLE --> 값 순환 여부 [기본값 NOCYCLE]

 

 

 CYCLE: 시퀀스 값이 최대값에 도달하면 최소값으로 다시 순환하도록 설정
 NOCYCLE: 시퀀스 값이 최대값에 도달하면 더 이상 증가시키지 않도록 설정

 

NOCACHE CACHE 숫자 --> 캐시메모리 할당 여부  [기본값: CACHE 20]

 

캐시메모리: 미리 발생될 값들을 생성해서 저장해두는 공간
                                           매번 호출할 때마다 새로 번호를 생성하는 것이 아니라
                                           캐시메모리라는 공간에 미리 생성된 값들을 가져다가 사용 (속도가 빠름!)

 

 

CREATE SEQUENCE SEQ_TEST;

 

 

 * 현재 계정이 가지고 있는 시퀀스를 조회
SELECT * FROM USER_SEQUENCES;

 

* 시퀀스 생성하기 

 

SEQ_EMPNO라는 이름의 시퀀스 생성 

(시작 번호를 300, 증가값은 5, 최대값은 310, 순환 x 캐시메모리 x)

 

CREATE SEQUENCE SEQ_EMPNO

START WITH 300 -- 시작번호를 300

INCREMENT BY 5 --> 증가값은 5

MAXVALUE 310 -- > 최대값 310 

NOCYCLE  --> 순환 X

NOCACHE --> 캐시메모리 X

 

 

* 시퀀스 사용하기 *

 

시퀀스명.CURRVAL : 현재 시퀀스 값(마지막으로 성공한 NEXTVAL의 수행한 값)

시퀀스명.NEXTVAL : 시퀀스 값에 일정한 값을 증가 시켜 발생한 결과값 

-- > 현재 시퀀스 값에서 INCREMENT BY 설정된 값 만큼 증가된 값 

 

 

SELECT SEQ_EMPNO.CURRVAL FROM DUAL; 

시퀀스명.CURRVAL : 

-- 오류 발생! NEXTVAL를 한번도 수행하지 않은 이상 CURRVAL는 사용할 수 없다

 

 

SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;

최대값을 넘었을 때 실행할 경우 오류가 발생된다.

 

 

* 시퀀스 구조 변경하기 *

 

 

 

 * 시퀀스 구조 변경하기 *
    
    ALTER SEQUENCE 시퀀스명
    [INCREMENT BY 숫자]       --> 증가값 (기본값: 1)
    [MAXVALUE 숫자]           --> 최대값 (기본값: 엄청큼..)
    [MINVALUE 숫자]           --> 최소값 (기본값: 1)
    [CYCLE | NOCYCLE]         --> 값 순환여부 (기본값: NOCYCLE)
    [NOCACHE | CACHE 숫자]     --> 캐시메모리 사용여부. 숫자(바이트단위) (기본값: CACHE 20)
    
    => START WITH 변경 불가!

 

ALTER SEQUENCE SEQ_EMPNO
INCREMENT BY 10
MAXVALUE 400;


 

  EMPLOYEE 테이블에 시퀀스 적용
    -> 시퀀스 사용 컬럼: 사원번호 (EMP_ID)

 

 

DROP SEQUENCE SEQ_EID;

--  * 시퀀스 삭제하기 


* 시퀀스 생성하기
CREATE SEQUENCE SEQ_EID
START WITH 300          -- 시작번호 : 300
NOCACHE;                    -- 캐시메모리 사용 X

 

INSERT INTO EMPLOYEE (EMP_ID, EMP_NAMEEMP_NOJOB_CODEHIRE_DATE)
    VALUES (SEQ_EID.NEXTVAL, '조건웅', '990928-1111111', 'J4', SYSDATE);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'ORACLE SQL' 카테고리의 다른 글

ORACLE SQL DDL 복습 내용 정리  (0) 2024.07.30
ORACLE SQL_DML  (0) 2024.07.29
ORACLE PL/SQL  (0) 2024.07.29
ORACLE SQL DDL_02  (0) 2024.07.28
ORACLE SQL DDL_01  (0) 2024.07.27