DB

SQL 시퀀스

짱코딩러 2022. 8. 8. 10:35

시퀀스 : 테이블 내의 유일한 숫자를 자동으로 생성하는 자동 번호 발생기

   시퀀스를 기본 키로 사용하게 되면 사용자의 부담을 줄일 수 있다.

   보통 INSERT 연산과 같이 사용되어 컬럼 값을 자동으로 발생시키는 용도로 사용된다.

 

시퀀스 기본 형식

REATE SEQUENCE sequence_name
                                  [START WITH n]                                   ①
                                  [INCREMENT BY n]                              ②
                                  [{MAXVALUE n | NOMAXVALUE}]        ③
                                  [{MINVALUE n | NOMINVALUE}]          ④
                                  [{CYCLE | NOCYCLE}]                         ⑤
                                  [{CACHE n | NOCACHE}]                     ⑥
CREATE SEQUENCE EX_SEQ --시퀀스이름 EX_SEQ
INCREMENT BY 1 --증감숫자 1
START WITH 1 --시작숫자 1
MINVALUE 1 --최소값 1
MAXVALUE 1000 --최대값 1000
NOCYCLE --순환하지않음
CACHE; --메모리에 시퀀스값 미리할당

① START WITH : 시퀀스 번호의 시작값을 지정

② INCREMENT BY : 연속적인 시퀀스 번호의 증가치를 지정

③ MAXVALUE n : 시퀀스가 가질 수 있는 최대값

     NOMAXVALUE :  디폴트값 설정. 증가일때 10^27, 감소일때 -1

④ MINVALUE n : 시퀀스가 가질수 있는 최소값

    NOMINVALUE : 디폴트값 설정. 증가일때 1, 감소일때 -10^28

⑤ CYCLE : 지정된 시퀀스 값이 최대값까지 도달하면 다시 START WITH에서 시작값부터 시작

     NOCYCLE : 최대값 도달 시 시퀀스 생성중지

⑥ CACHE n : 메모리상의 시퀀스 값을 미리 할당(기본값으로 20개씩)

                        속도를 증가시키기 위해 원하는 숫자 만큼 미리 만들어 Shared Pool의 Library Cache에 상주 시키는 기능

     NOCACHE : 시퀀스값을 메모리에 할당하지 않음

 

시퀀스 딕셔너리 확인

DESC USER_SEQUENCES

 

시퀀스 객체 생성

CREATE SEQUENCE 시퀀스명
INCREMENT BY 증감 숫자
START WITH 시작숫자;
CREATE SEQUENCE DEPT_DEPTNO_SEQ
INCREMENT BY 10
START WITH 10;
=>10부터 시작해서 10씩 증가하는 시퀀스

 

시퀀스 제거

DROP SEQUENCE 시퀀스명;

 

시퀀스 수정

START WITH만 빼고 생성 구조와 동일하다.

ALTER SEQUENCE  시퀀스명
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

 

CURRVAL, NEXTVAL

CURRVAL : 현재 값을 반환

SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL;

NEXTVAL : 현재 시퀀스 값의 다음 값을 반환

SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL;

CURRVAL에 새로운 값이 할당되기 위해서는 NEXTVAL로 새로운 값을 생성해야 합니다. 
(NEXTVAL로 새로운 값을 생성하면 그 값이 CURRVAL가 됨.) 

서브쿼리에서는 사용X