본문 바로가기
Database

오라클 SEQUENCE로 자동 증가 번호 생성하기

by 굿센스굿 2024. 12. 3.
반응형

 


1. SEQUENCE란 무엇인가?

오라클 데이터베이스에서 **SEQUENCE(시퀀스)**는 자동으로 고유한 숫자 값을 생성해주는 객체입니다.
주로 기본 키와 같이 유일한 값을 필요로 하는 경우 사용됩니다. SEQUENCE는 트랜잭션 간 충돌 없이 순차적으로 번호를 생성할 수 있어 대규모 데이터 처리에 적합합니다.


2. SEQUENCE의 특징

  1. 자동 증가: 값을 수동으로 관리하지 않아도 지정된 규칙에 따라 숫자가 자동으로 증가합니다.
  2. 유일성 보장: SEQUENCE가 생성하는 값은 중복되지 않습니다.
  3. 다양한 설정 가능: 시작 값, 증가 값, 최대값, 반복 여부 등을 설정할 수 있습니다.
  4. 독립성: 테이블과 독립적으로 동작하며, 여러 테이블에서 공유할 수도 있습니다.

3. SEQUENCE 생성 및 삭제

SEQUENCE 생성

SEQUENCE는 CREATE SEQUENCE 명령어를 사용하여 생성합니다.

기본 문법

CREATE SEQUENCE 시퀀스_이름
START WITH 시작값
INCREMENT BY 증가값
[MINVALUE 최소값 | NOMINVALUE]
[MAXVALUE 최대값 | NOMAXVALUE]
[CYCLE | NOCYCLE]
[CACHE 캐시값 | NOCACHE];

주요 옵션 설명

  • START WITH: 생성되는 첫 번째 숫자 (기본값: 1).
  • INCREMENT BY: 각 호출 시 증가 또는 감소할 값 (기본값: 1).
  • MINVALUE: 생성 가능한 최소값 (기본값: 1).
  • MAXVALUE: 생성 가능한 최대값.
  • CYCLE: 최대값 도달 시 다시 최소값부터 시작.
  • CACHE: 메모리에 미리 저장할 시퀀스 숫자 개수로 성능 향상.

SEQUENCE 삭제

시퀀스를 삭제하려면 DROP SEQUENCE 명령어를 사용합니다.

DROP SEQUENCE 시퀀스_이름;

4. SEQUENCE 사용법

SEQUENCE 값을 호출하려면 NEXTVAL CURRVAL을 사용합니다.

  • NEXTVAL: 다음 순번 값을 반환합니다.
  • CURRVAL: 가장 최근에 생성된 값을 반환합니다.

사용 예제

SELECT 시퀀스_이름.NEXTVAL FROM DUAL;
  • 설명: 시퀀스_이름에서 다음 값을 가져옵니다.
SELECT 시퀀스_이름.CURRVAL FROM DUAL;
  • 설명: 가장 최근에 생성된 값을 확인합니다.

5. SEQUENCE 활용 예제

예제 1: 기본 키 자동 생성

1) SEQUENCE 생성

CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCACHE
NOCYCLE;
  • 설명: emp_seq라는 이름의 SEQUENCE를 생성하며, 시작값은 1, 증가값은 1로 설정합니다.

2) INSERT문에서 사용

INSERT INTO employees (employee_id, name, department)
VALUES (emp_seq.NEXTVAL, '홍길동', 'IT');
  • 설명: emp_seq에서 생성된 값을 employee_id에 삽입합니다.

3) 결과 확인

SELECT * FROM employees;

Employee_ID Name Department

1 홍길동 IT

예제 2: 주문 번호 생성

1) SEQUENCE 생성

CREATE SEQUENCE order_seq
START WITH 1000
INCREMENT BY 10
MAXVALUE 9999
NOCYCLE;
  • 설명: 주문 번호를 위한 SEQUENCE를 생성하며, 시작값은 1000, 증가값은 10, 최대값은 9999로 설정합니다.

2) 값 확인

SELECT order_seq.NEXTVAL FROM DUAL;
  • 결과: 1000
SELECT order_seq.NEXTVAL FROM DUAL;
  • 결과: 1010

예제 3: CURRVAL 사용

SELECT emp_seq.CURRVAL FROM DUAL;
  • 설명: emp_seq에서 마지막으로 생성된 값을 가져옵니다.
  • 주의: NEXTVAL을 호출한 이후에만 CURRVAL을 사용할 수 있습니다.

6. SEQUENCE와 트리거 결합

SEQUENCE는 테이블의 기본 키를 자동 생성하는 트리거와 결합해 자주 사용됩니다.

트리거 생성 예제

CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
  :NEW.employee_id := emp_seq.NEXTVAL;
END;
  • 설명: employees 테이블에 새 행을 삽입할 때마다 emp_seq를 사용해 employee_id를 자동 생성합니다.

사용

INSERT INTO employees (name, department)
VALUES ('김철수', 'HR');
  • 결과: employee_id는 자동으로 SEQUENCE에서 생성된 값으로 설정됩니다.

7. SEQUENCE 사용 시 유의사항

  1. 중복 방지
    SEQUENCE는 트랜잭션 간 고유 값을 보장합니다. 그러나 삭제된 행의 번호를 재사용하지 않으므로, 필요 시 CYCLE 옵션을 고려해야 합니다.
  2. 최대값 관리
    SEQUENCE는 최대값에 도달하면 멈추거나(CYCLE 미설정 시) 다시 최소값으로 돌아갑니다(CYCLE 설정 시).
    데이터 모델링 시 이를 고려해야 합니다.
  3. 성능 최적화
    다수의 트랜잭션에서 SEQUENCE를 호출하면 성능 문제가 발생할 수 있습니다. 이를 방지하려면 CACHE 옵션을 적절히 설정하세요.

8. 마치며

오라클의 SEQUENCE는 고유한 숫자를 생성하고 관리하는 데 필수적인 도구입니다.
SEQUENCE를 사용하면 기본 키 생성, 주문 번호 관리, 기타 고유 값 생성 작업이 간단하고 안전해집니다.
위의 예제들을 참고해 SEQUENCE를 데이터베이스 설계와 운영에 효과적으로 활용해보세요.

반응형