DB/Oracle

[Oracle] Sequence 사용 방법

멍목 2022. 2. 17. 23:14
반응형

이번 포스팅에서는 Oracle의 Seq 사용 방법에 대해 알아보겠습니다.

 


 

1. Sequence 생성

CREATE SEQUENCE 시퀀스명 
       INCREMENT BY 숫자 -- 숫자만큼 증가(음수일 경우 그 숫자만큼 감소)
       START WITH 숫자 -- 시작 숫자 설정
       MINVALUE 숫자 -- 최소값 설정
       MAXVALUE 숫자 -- 최대값 설정
       CYCLE/NOCYCLE   -- CYCLE : 시퀀스가 최대값에 도달하면 최소값부터 다시 시작, NOCYCLE : 최대값 생성 시 시퀀스 생성 중지
       CACHE/NOCACHE   -- CACHE : 메모리에 시퀀스 값을 미리 할당, NOCACHE : 시퀀스값을 메모리에 할당X

 

예시

CREATE  SEQUENCE USER_SEQ	-- USER_SEQ라는 이름으로 생성
        MINVALUE 1			-- 최소 값 (1)
        MAXVALUE 9999		-- 최대 값 (9999)
        INCREMENT BY 1		-- 증가값 (1)
        START WITH 1		-- 시작숫자 (1)
        NOCACHE				-- CACHE 담기 X
        CYCLE;				-- 최대값 도달 시, 1(시작숫자)부터 시작

 

 

2. Sequence 수정

CREATE에서 ALTER로 명령어를 바꾼것과 같다.

단, START WITH은 수정이 불가능하다.

ALTER   SEQUENCE 시퀀스명 
        INCREMENT BY 숫자 -- 숫자만큼 증가(음수일 경우 그 숫자만큼 감소)
        MINVALUE 숫자 -- 최소값 설정
        MAXVALUE 숫자 -- 최대값 설정
        CYCLE/NOCYCLE   -- CYCLE : 시퀀스가 최대값에 도달하면 최소값부터 다시 시작, NOCYCLE : 최대값 생성 시 시퀀스 생성 중지
        CACHE/NOCACHE   -- CACHE : 메모리에 시퀀스 값을 미리 할당, NOCACHE : 시퀀스값을 메모리에 할당X

 

예시

ALTER   SEQUENCE USER_SEQ	-- USER_SEQ 수정
        MINVALUE 10			-- 최소 값 (1)
        MAXVALUE 99990		-- 최대 값 (99990)
        INCREMENT BY 1		-- 증가값 (10)
        NOCACHE				-- CACHE 담기 X
        CYCLE;				-- 최대값 도달 시, 1(시작숫자)부터 시작

 

 

3. Sequence 삭제

DROP SEQUENCE 시퀀스명;

 

예시

DROP SEQUENCE USER_SEQ;

 

 

4. Sequence 조회

SELECT 시퀀스명.CURRVAL FROM DUAL; --해당 시퀀스의 현재 값 확인

SELECT * FROM USER_SEQUENCES;  --전체 시퀀스 조회

 

예시

SELECT USER_SEQ.CURRVAL FROM DUAL;

 

 

 

5. Sequence 사용

아래처럼 입력시, SEQ가 자동으로 생성됩니다.

시퀀스명.NEXTVAL

 

예시

INSERT INTO USERS
(
    USER_SEQ
)
VALUES
(
    LPAD(USER_SEQ.NEXTVAL, 4, '0')
)

 

위의 예시에서 PK로 쓰기 위해서 날짜와 데이터를 의미하는 단어를 이용하여 응용한 쿼리는 아래와 같다.

INSERT INTO USERS
(
    USER_SEQ
)
VALUES
(
    'USER'||TO_CHAR(sysdate,'YYYYMMDD')||LPAD(USER_SEQ.NEXTVAL, 4, '0')
)

- LPAD : 1을 0001로 출력( 숫자를 4자리로 출력하게함. )

- TO_CHAR(sysdate, 'YYYYMMDD') : 현재 날짜를 YYYYMMDD형식으로 문자열 추출

- || : 앞 뒤의 문자열을 합침

반응형