728x90

1. ORACLE SEQUENCE란?
SEQUENCE는 Oracle Database에서 유일한 숫자 값을 자동으로 생성하기 위해 사용하는 객체입니다. 주로 기본 키(PK)로 사용되는 고유 값을 생성하거나, 일련번호를 부여할 때 활용됩니다.
2. SEQUENCE의 필요성
- 중복 없는 고유 값 자동 생성
- 동시성 문제 해결
- 복잡한 로직 없이 증가 번호 관리
- 다중 사용자 환경에서 충돌 방지
3. 기본 SEQUENCE 생성 문법
CREATE SEQUENCE 시퀀스명
START WITH 시작값
INCREMENT BY 증가값
[MINVALUE 최소값]
[MAXVALUE 최대값]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];
4. 기본 SEQUENCE 생성 예제
CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
emp_seq는 1부터 시작해 1씩 증가하며, 캐시를 사용하지 않고 순환도 하지 않는 기본적인 시퀀스입니다.
5. NEXTVAL과 CURRVAL 사용 예제
-- 다음 숫자 가져오기
SELECT emp_seq.NEXTVAL FROM dual;
-- 마지막으로 생성된 숫자 가져오기
SELECT emp_seq.CURRVAL FROM dual;
주의: CURRVAL은 NEXTVAL이 호출된 이후에만 사용할 수 있습니다.
6. SEQUENCE를 INSERT 문에 활용하기
INSERT INTO employees (id, name, department)
VALUES (emp_seq.NEXTVAL, '홍길동', '영업부');
자동으로 증가된 번호를 기본 키로 사용하는 가장 일반적인 형태입니다.
7. SEQUENCE 옵션 상세 비교
| 옵션 | 설명 | 기본값 |
|---|---|---|
| START WITH | 초기 시작값 설정 | 1 |
| INCREMENT BY | 증가 또는 감소 단위 | 1 |
| MINVALUE / MAXVALUE | 허용 범위 제한 | NOMINVALUE / NOMAXVALUE |
| CYCLE | 최대값 도달 시 다시 시작 | NOCYCLE |
| CACHE | 성능 향상을 위한 메모리 캐싱 | 20 |
8. SEQUENCE 수정 예제
ALTER SEQUENCE emp_seq
INCREMENT BY 10
CACHE 50;
시퀀스의 증가 단위를 10으로, 캐시를 50으로 수정합니다.
9. SEQUENCE 삭제
DROP SEQUENCE emp_seq;
더 이상 필요하지 않은 시퀀스는 삭제하여 오브젝트 관리를 효율화할 수 있습니다.
10. 실무 활용 예: 날짜 기반 일련번호
-- SEQUENCE와 SYSDATE를 함께 활용
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') || LPAD(daily_seq.NEXTVAL, 4, '0')
FROM dual;
20250608 기준 결과 예시: 202506080001
11. SEQUENCE와 트리거 연동
CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
:NEW.id := emp_seq.NEXTVAL;
END;
/
INSERT 시 자동으로 id가 생성되도록 트리거와 연계한 예제입니다.
12. SEQUENCE 성능 주의사항
- CACHE 값을 너무 작게 설정하면 성능 저하 발생
- 분산 시스템에서는 NOCACHE/NOCYCLE을 고려해야 중복 방지
- 트랜잭션 ROLLBACK 시에도 시퀀스 값은 소모됨
- CURRVAL은 세션 내에서만 유효
13. 최신 Oracle에서의 변화 (Oracle 12c 이후)
- IDENTITY 칼럼 도입으로 SEQUENCE 자동화
- CREATE TABLE 시 시퀀스 내장 가능
CREATE TABLE employees (
id NUMBER GENERATED ALWAYS AS IDENTITY,
name VARCHAR2(100)
);
14. 결론
Oracle SEQUENCE는 기본 키 생성을 포함해 다양한 업무 로직에 필수적인 객체입니다. 단순한 숫자 생성 그 이상의 역할을 하며, 트랜잭션 및 성능 특성까지 이해하고 사용할 때 진정한 가치가 발휘됩니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle SQL Programming - Steven Feuerstein
- 오라클 PL/SQL 실무 활용서 - 김상현 저
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] SYNONYM() 시노님 개념부터 생성 예제까지 완전 정복 (0) | 2025.06.09 |
|---|---|
| [ORACLE] VIEW() 가상 테이블로 복잡한 SQL을 단순하게 만드는 방법 (0) | 2025.06.09 |
| [ORACLE] PROFILE() 비밀번호 정책과 로그인 제한을 한 번에 설정하는 법 (0) | 2025.06.08 |
| [ORACLE] ROLE() 실무 예제로 배우는 권한 관리의 핵심 기초 (0) | 2025.06.08 |
| [ORACLE] TRIGGER() 실전 예제로 배우는 데이터 자동화의 핵심 기술 (0) | 2025.06.08 |