10.3. 시퀀스(Sequence)의 이해 및 활용

2019. 4. 24. 14:38 Database/Oracle SQL

시퀀스란?

  • - 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
  • - 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다.
  • - 보통 PRIMARY KEY 값을 생성하기 위해 사용 한다.
  • - 메모리에 Cache되었을 때 시퀀스값의 액세스 효율이 증가 한다.
  • - 시퀀스는 테이블과는 독립적으로 저장되고 생성된다.


시퀀스 생성

-- 시퀀스 생성 Syntax
CREATE SEQUENCE sequence_name
    [START WITH n]
    [INCREMENT BY n]
    [MAXVALUE n | NOMAXVALUE]
    [MINVALUE n | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE | NOCACHE]


  • - START WITH : 시퀀스의 시작 값을 지정한다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 한다.
  • - INCREMENT BY : 시퀀스의 증가 값을 지정한다. n을 2로 하면 2씩 증가한다. START WITH를 1로, INCREMENT BY를 2로 설정하면 1, 3, 5, 7,.. 이렇게 시퀀스 번호가 증가한다.
  • - MAXVALUE : 시퀀스 최대값
  • - MINVALUE : 시퀀스 최소값
  • - CYCLE|NOCYCLE : 최대값 도달시 순환 여부
  • - CACHE | NOCACHE : CACHE 여부, 원하는 숫자만큼 미리 만들어 Shared Pool의 Library Cache에 상주시킨다.

시퀀스 수정

START WITH 값을 제외하고 ALTER SEQUENCE 명령어로 수정 할 수 있다.

-- 시퀀스 수정 Syntax
ALTER SEQUENCE sequence_name
    [INCREMENT BY n]
    [MAXVALUE n | NOMAXVALUE]
    [MINVALUE n | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE | NOCACHE]


시퀀스의 사용예

시퀀스 생성

empno를 자동 증가하는 시퀀스를 만들어 보자

-- 8000부터 시작하는 시퀀스를 생성하자
CREATE SEQUENCE  seq_empno
 START WITH  8000
INCREMENT BY 1
 CACHE 20;
 
 
-- 시퀀스가 정상적으로 생성되었는지 조회해 보자
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.CURRVAL FROM DUAL;


시퀀스를 이용해서 데이터를 등록해 보자

-- INSERT 시 시퀀스 사용
INSERT INTO emp
        (empno,
         ename, job, mgr,
         hiredate, sal, comm, deptno)
VALUES
        (seq_empno.NEXTVAL,
         'TIGER', 'MANAGER', 7839,
         SYSDATE, 3000, null, 20);
 
 
-- SELECT 절에서 시퀀스 사용
CREATE TABLE emp2
AS
SELECT seq_empno.NEXTVAL as empno, ename,
       job, mgr, hiredate, sal, comm, deptno
FROM emp;
 
 
-- 시퀀스가 정상적으로 반영되었는지 조회해 보자
SELECT * FROM emp;


시퀀스 수정

시퀀스 수정 예이다.

-- seq_empno  시퀀스의 증과값과 Cache 사이즈를 변경하는 예이다.
ALTER SEQUENCE  seq_empno
INCREMENT BY 10
CACHE 40;
 
 
-- 시퀀스가 정상적으로 변경되었는지 조회해 보자
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.NEXTVAL FROM DUAL;
SELECT seq_empno.CURRVAL FROM DUAL;
시퀀스 삭제

DROP SEQUENCE 명령으로 시퀀스를 삭제 할 수 있다.

-- seq_empno 시퀀스를 삭제한다.
DROP SEQUENCE seq_empno;


출처 : http://www.gurubee.net/lecture/1037

'Database > Oracle SQL' 카테고리의 다른 글

10.4. SYNONYM(동의어)  (0) 2019.04.24
10.2. VIEW 테이블  (0) 2019.04.24
10.1. 인덱스(Index)  (0) 2019.04.24
9.2. 데이터 사전(Data Dictionary) 정보조회  (0) 2019.04.24
9.1. 데이터 사전(Data Dictionary)이란?  (0) 2019.04.24
7.7. UNION [ALL], INTERSECT, MINUS 연산자  (0) 2019.04.19
7.6. Scalar Subquery  (0) 2019.04.19
7.5. Inline View (From절 Subquery)  (0) 2019.04.19