오라클(Oracle) 데이터베이스를 사용하다 보면, 테이블에 기본키나 고유 값을 자동으로 부여해야 하는 상황이 자주 발생합니다. 이럴 때 가장 많이 사용하는 기능 중 하나가 바로 **시퀀스(Sequence)**입니다. 오라클 시퀀스는 고유한 일련번호를 자동으로 생성해 주는 객체로, 테이블의 ID, NO, SEQ와 같은 컬럼의 값을 자동으로 생성할 때 유용하게 활용됩니다.
특히 오늘은 오라클 시퀀스를 사용할 때 핵심적으로 알아야 할 NEXTVAL과 CURRVAL의 차이점과 활용법, 그리고 **현재 시퀀스 값(CURRVAL)**을 안전하게 조회하는 방법에 대해 상세히 정리해 드리겠습니다.
✔️ 오라클 시퀀스란?
**시퀀스(Sequence)**는 오라클 데이터베이스에서 일련의 숫자를 생성하기 위해 사용하는 객체입니다. 일반적으로 다음과 같은 용도로 사용됩니다.
- 테이블의 기본키 값을 자동으로 생성
- 유일한 일련번호(Unique Number) 부여
- 병렬 처리나 동시성 환경에서도 충돌 없이 값 생성 가능
시퀀스는 생성 후 NEXTVAL 또는 CURRVAL을 이용해 값을 가져올 수 있으며, 데이터베이스의 일관성과 무결성을 보장하는 데 매우 유용한 기능입니다.
🔁 시퀀스 값 조회 명령어: NEXTVAL vs CURRVAL
오라클 SQL에서 시퀀스 값을 조회하거나 증가시킬 때는 보통 두 가지 키워드를 사용합니다.
1. NEXTVAL – 시퀀스 값을 증가시키고 반환
SELECT emp_seq.NEXTVAL FROM dual;
- 시퀀스 emp_seq의 현재 값을 1 증가시키고 그 값을 반환합니다.
- 이 명령이 실행될 때마다 값이 증가합니다.
- 여러 사용자가 동시에 호출해도 중복되지 않는 고유한 값이 생성됩니다.
- 주로 INSERT 시 새로운 ID를 할당할 때 사용됩니다.
2. CURRVAL – 현재 세션에서 마지막으로 호출된 NEXTVAL 값 조회
SELECT emp_seq.CURRVAL FROM dual;
- CURRVAL은 현재 세션에서 마지막으로 호출한 NEXTVAL의 값을 반환합니다.
- 단, 현재 세션에서 한 번이라도 NEXTVAL을 호출한 이후에만 사용 가능합니다.
- CURRVAL을 여러 번 조회해도 값은 변하지 않으며 고정됩니다.
- INSERT 이후 SELECT에서 같은 값을 참조할 때 유용합니다.
🧠 CURRVAL 사용 시 주의할 점
CURRVAL은 사용 전 반드시 NEXTVAL을 호출해야 합니다.
-- 잘못된 사용 (에러 발생 가능)
SELECT emp_seq.CURRVAL FROM dual;
-- 올바른 사용 순서
SELECT emp_seq.NEXTVAL FROM dual;
SELECT emp_seq.CURRVAL FROM dual;
- 만약 세션 내에서 한 번도 NEXTVAL을 호출하지 않고 CURRVAL을 실행하면 다음과 같은 오류가 발생합니다:
- ORA-08002: sequence CURRVAL is not yet defined in this session
- 이는 CURRVAL이 해당 세션에서 어떤 기준 값도 없기 때문에 조회할 수 없다는 뜻입니다.
따라서, CURRVAL을 사용하기 전에는 반드시 NEXTVAL로 값을 한 번 생성해 두어야 합니다.
📌 실전 예제: 시퀀스 생성부터 CURRVAL 조회까지
다음은 오라클 시퀀스를 생성하고, 값을 증가시킨 후 현재값을 조회하는 전체 흐름을 보여주는 예제입니다.
1. 시퀀스 생성
CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
- START WITH 1 : 시작값은 1
- INCREMENT BY 1 : 1씩 증가
- NOCACHE : 시퀀스 값을 미리 캐싱하지 않음
- NOCYCLE : 최대값 도달 시 다시 시작하지 않음
2. 값 증가 및 조회
-- 시퀀스 값 증가
SELECT emp_seq.NEXTVAL FROM dual;
-- 현재 세션의 마지막 시퀀스 값 조회
SELECT emp_seq.CURRVAL FROM dual;
이렇게 하면 시퀀스 값이 정상적으로 증가하며, 동일 세션에서는 CURRVAL로 마지막 값을 지속적으로 확인할 수 있습니다.
🧑💻 실무 적용: 테이블에 시퀀스 값 삽입 후 조회하기
보통 오라클에서는 테이블에 INSERT한 후, 해당 행의 시퀀스 값을 다시 사용해야 할 때가 많습니다. 예를 들어, 사원 정보를 입력하고 해당 사원의 ID를 다시 참조하는 경우입니다.
1. INSERT 시 NEXTVAL 사용
INSERT INTO employee (emp_id, emp_name)
VALUES (emp_seq.NEXTVAL, '홍길동');
2. 방금 입력한 emp_id 값을 CURRVAL로 확인
SELECT emp_seq.CURRVAL FROM dual;
이렇게 하면 방금 INSERT에 사용한 ID 값과 동일한 값을 안전하게 다시 조회할 수 있어, 상세 페이지 링크나 다른 테이블과의 연관 INSERT 작업에도 활용 가능합니다.
🛠️ 실무 팁: 트리거(Trigger)와 시퀀스 자동 연동
실무에서는 시퀀스를 매번 SQL에 직접 쓰기보다, 트리거를 활용해 자동으로 값을 채우도록 설정하기도 합니다.
예) employee 테이블에 시퀀스 자동 입력 트리거
CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
SELECT emp_seq.NEXTVAL
INTO :NEW.emp_id
FROM dual;
END;
이렇게 하면 INSERT 시 emp_id를 지정하지 않아도 자동으로 emp_seq.NEXTVAL이 들어가므로, 코드가 간결해지고 실수를 줄일 수 있습니다.
🧾 정리: NEXTVAL과 CURRVAL 차이점 요약
항목 NEXTVAL CURRVAL
기능 | 시퀀스 값을 1 증가시키고 반환 | 현재 세션에서 마지막 NEXTVAL 값 반환 |
값 변화 | 호출할 때마다 증가 | 동일 세션에서는 고정 |
사전 조건 | 없음 | 해당 세션에서 NEXTVAL 호출 필요 |
사용 목적 | 새 값 생성 (INSERT 시 주로 사용) | 이전에 생성한 값 참조 (SELECT 시 주로 사용) |
📣 마무리: CURRVAL을 제대로 알아야 오라클을 잘 다룰 수 있다!
오라클 시퀀스는 데이터베이스 설계와 프로그래밍에서 아주 기본적이지만, 매우 강력한 기능입니다. 특히 CURRVAL은 사용자가 정확히 동작 방식을 이해하지 못하면 쉽게 오류가 발생할 수 있으므로, 오늘 정리한 내용을 통해 실무에서 안정적인 쿼리 작성에 도움이 되시길 바랍니다.
이제부터는 시퀀스를 사용할 때 NEXTVAL과 CURRVAL의 정확한 차이와 사용 시점을 명확히 기억하고, 효율적이고 안전한 데이터베이스 작업을 하시기 바랍니다.
'정보' 카테고리의 다른 글
MySQL SSH 연결 방법 완벽 가이드: HeidiSQL과 Workbench를 활용한 안전한 접속법 (0) | 2025.05.07 |
---|---|
데이터베이스 기초 완전 정복! SQL부터 테이블, 스키마까지 한 번에 배우기 (0) | 2025.05.07 |
오라클 SQL의 강력한 집계기능, SUM(DECODE) 완벽 가이드 (0) | 2025.05.07 |
[Oracle 실무 팁] 오라클에서 컬럼 순서 변경하는 방법: INVISIBLE과 VISIBLE 속성 완전 정복 (0) | 2025.05.07 |
[Oracle] 오라클 컬럼 사이즈 변경 방법 완벽 정리: ALTER TABLE MODIFY 실전 가이드 (0) | 2025.05.07 |