SQL :: Oracle :: SEQUENCE

김병철·2022년 9월 15일
0

SQL

목록 보기
10/11

SEQUENCE

SEQUENCE ?

자동으로 번호를 발생시켜주는 객체
정수의 연속된 수를 자동으로 순차적으로 발생시킨다.

SEQUENCE 객체 생성 구문

CREATE SEQUENCE 시퀀스명
START WITH 시작숫자     -생략가능,처음 발생시킬 시작값 지정
INCREMENT BY 증가값     -생략가능,한번 시퀀스 증가할때 몇씩 증가할 것인지 설정
MAXVALUE 최대값         -생략가능,최대값 지정
MINVALUE 최소값         -생략가능,최소값 지정
CYCLE/NOCYCLE          -생략가능,값의 순환 여부를 결정
CACHE 바이트크기/NOCACHE -생략가능, 캐시메모리 여부 지정 기본값 20BYTE
  • CACHE MEMORY ?

    시퀀스로부터 미리 발생될 값들을 생성하여 저장해두는 공간
    매번 호출할 때마다 새롭게 번호를 생성하는 것보다 캐시메모리에 미리 생성된 값들을 가져다 쓰면 훨씬 속도가 빠르다.
    단, 접속이 끊기고 나서 재접속 후 기존에 생성된 값들은 날아가고 없다.

  • 예시 :

    300부터 시작해서, 5씩 증가하고, 최대값은 310, 끝나면 반복하지 않고, 캐시에 저장하지도 않는다.

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

SEQUENCE 사용 구문

시퀀스명.CURRVAL

현재 시퀀스의 값(마지막으로 발생된 NEXTVAL의 값을 의미한다.)

시퀀스명.NEXTVAL

현재 시퀀스의 값을 증가시키고 그 증가된 시퀀스의 값

  • 단, 시퀀스 생성 후 첫 NEXTVAL은 START WITH로 지정된 시작값으로 발생
    그렇기 때문에 시퀀스 생성 후 첫 CURRVAL은 수행할 수 없다.

  • 예시 :

SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;  --300
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;  --300

SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;  --305
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;  --310
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;  --310
  • MAXVALUE 초과시 에러 : sequence %s.NEXTVAL %s %sVALUE and cannot be instantiated

SEQUENCE 변경

ALTER SEQUENCE 시퀀스명
INCREMENT BY 증가값
MAXVALUE 최대값
MINVALUE 최소값
CYCLE/NOCYCLE
CACHE 바이트크기/NOCACHE
  • 'START WITH'는 변경 불가

  • 'START WITH'를 변경하고 싶다면 시퀀스 삭제 후 재생성

  • 예시 :

ALTER SEQUENCE SEQ_EMPNO
INCREMENT BY 10
MAXVALUE 400;

SEQUENCE 삭제

DROP SEQUENCE 시퀀스명;
profile
keep going on~

0개의 댓글