DB/SQL

SEQUENCE 객체

lavender1122 2024. 1. 2. 11:50

SEQUENCE 객체 정의

  • 연속, 열거, 순서 의미
  • 자동적으로 번호 생성하기 위한 객체
  • 테이블과 독립이므로 여러 곳에서 사용 가능

SEQUENCE 이용하는 경우

  • PRIMARK KEY 를 설정할 후보기카 없거나 PK를 특별히 의미 있게 만들지 않아도 되는 경우
  • 자동으로 순서적으로 번호 필요한 경우

  • INCREMENT BY : 시퀀스 실행시 증가 시킬값
  • START WITH : 시퀀스의 시작값(MINVALUE과 같거나 커야한다)
  • MINVALUE: 시퀀스가 시작되는 최솟값
  • MAXVALUE : 시퀀스가 끝나는 최댓값
  • NOCYCLE | CYCLE : NOCYCLE( 반복안함), CYCLE(시퀀스의 최댓값에 도달 시 최솟값 1부터 다시시작)
  • NOCACHE | CACHE : NOCACHE(사용안함), CACHE(캐시를 사용하여 미리 값을 할당해 놓아서 속도가 빠르며, 동시 사용자가 많을 경우 유리)
  • NOORDER | ORDER : NOORDER(사용안함), ORDER(요청 순서로 값을 생성하여 발생 순서를 보장하지만 조금의 시스템 부하가 있음)

SEQUENCE 생성

CREATE SEQUENCE emp_seq
       INCREMENT BY 1
       START WITH 1
       MINVALUE 1
       MAXVALUE 9999
       NOCYCLE
       NOCACHE
       NOORDER;
  • 1부터 시작하여 9999까지 1씩 증가
  • CACHE를 사용할 경우
    • CACHE 또는 CACHE "값"으로 지정할 수 있다
    • 값을 지정하지 않으면 기본값은 20이다.
    • 지정한 값만큼 시퀀스를 미리 생성해 놓는다
CACHE -- 기본값 20
또는
CACHE 100 -- 지정한 값만큼

 

SEQUENCE 변경

  • START WITH 변경 할 수 없다.

SEQUENCE 사용

시퀀스명.NEXTVAL

SELECT 시퀀스명.NEXTVAL
FROM 테이블명

 

  • 일렬번호 생성
  • 시퀀스를 실행할 때 마다 값이 증가하니 주의!
  • 증가된 값을 다시 내릴 수 없다.
  • INSERT문에서 순번을 매길 때 유용하게 사용
더보기
INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, JIREDATE, SAL, COMM, DEPTNO)
VALUES (EMP_SEQ.NEXTVAL
		,'TIGER'
        ,'ANALYST'
        ,7566
        ,TRUNC(SYSDATE)
        ,3000
        ,NULL
        ,20)

시퀀스명.CURRVAL

SELECT 시퀀스명.CURRVAL
FROM 테이블명;
  • 현재 시퀀스 순번 가져올 수 있다.
  • 여러번 실행해도 순번 증가하지 않고, 현재 순번만 가져온다.
  • CURRVAL은 NEXTVAL을 한번 실행한 세션에만 사용 가능
    • 사용 안할시 에러 발생(ORA-08002 : EMP_SEQ.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다.)
  • 쿼리문에 사용시 NEXTVAL과 함께 사용
  • PROCEDURE, FUNCTION에서 사용할 경우 내부에서는 한 세션이기 때문에 쿼리문이 같지 않아도 오류 발생하지 않는다.

 

더보기
SELECT EMP_SEQ.NEXTVAL
	  ,EMP_SEQ.CURRVAL
    FROM DUAL;

시퀀스 수정

ALTER SEQUENCE 시퀀스명 INCREMENT BY 바뀔숫자;
ALTER SEQUENCE 시퀀스명 MAXVALUE 바뀔숫자;
  • START WITH(변경불가) 외에는 모두 변경 가능
더보기
ALTER SEQUENCE EMP_SEQ INCREMENT BY 2;

시퀀스 증가값을 2로 변경

ALTER SEQUENCE EMP_SEQ MAXVALUE 99999

시퀀스 최댓값을 99999 변경

SEQUENCE 제거

DROP SEQUENCE 시퀀스명
  • 시퀀스 값을 초기화하기 위해서 시퀀스를 삭제 후 다시 생성
출처
https://gent.tistory.com/393