ORACLE Sequence란?
ORACLE Sequence는 데이터베이스 객체로, 순번을 생성하고 제어하는 데 사용된다.
순번은 일련의 숫자 값을 생성하는 객체로, 주로 테이블의 기본 키 값을 생성하는 데에 활용된다.
Sequence를 사용하면 여러 사용자가 동시에 접근해도 고유한 값이 보장된다는 장점이 있다.
Sequence 생성하기
ORACLE에서 Sequence를 생성하는 방법은 간단하다.
다음과 같이 CREATE SEQUENCE 문을 사용하여 생성할 수 있다.
-- ############################
-- SEQUENCE 생성하기
-- []에 있는 값은 임의로 변경해 주시면 됩니다.
-- {}에 있는 값은 선택하여 사용해 주시기 바랍니다.
-- ############################
CREATE SEQUENCE [sequence_name]
START WITH [start_value]
INCREMENT BY [increment_value]
MAXVALUE [max_value]
MINVALUE [min_value]
{CYCLE/NOCYCLE};
- sequence_name: Sequence 이름 지정
- start_value: Sequence가 시작할 값 지정
- increment_value: Sequence 값이 증가하는 양 지정
- max_value: 최댓값 지정
- min_value: 최솟값 지정
- CYCLE/NOCYCLE: 최댓값에 도달 시 순환 여부 결정
Sequence 사용하기
SELECT sequence_name.NEXTVAL FROM dual;
위와 같이 사용하면 Sequence에 다음 값을 가져오는 데 사용된다.
(dual은 ORACLE에서 단일 행의 가상 테이블)
예제 1 (생성 및 Sequence 활용하여 값 넣기)
-- ############################
-- custimer_id_seq라는 SEQUENCE 생성하기
-- 시작할 값은 1, 증가값은 1씩 증가하며 최대값은 9999
-- ############################
CREATE SEQUENCE customer_id_seq
START WITH 1000
INCREMENT BY 1
MAXVALUE 9999
NOCYCLE;
-- ############################
-- 시퀀스 테스트를 위하여 customers 테이블 생성
-- ############################
CREATE TABLE customers (
customer_id NUMBER PRIMARY KEY,
name VARCHAR2(100)
);
-- customer_id = 1, name = 'John Doe'
INSERT INTO customers (customer_id, name)
VALUES (customer_id_seq.NEXTVAL, 'John Doe');
-- customer_id = 2, name = 'Jane Smith'
INSERT INTO customers (customer_id, name)
VALUES (customer_id_seq.NEXTVAL, 'Jane Smith');
예제 2 (현재 사용 중인 Sequence 값 변경하기)
--현재값 확인하기[현재값 = 2]
SELECT customer_id_seq.NEXTVAL FROM DUAL;
--시퀀스의 증가값을 10으로 변경. 다음 시퀀스 호출될 때마다 10씩 값 증가
ALTER SEQUENCE customer_id_seq INCREMENT BY 100;
--현재값을 100으로 변경
ALTER SEQUENCE customer_id_seq RESTART WITH 100;
결론
ORACLE Sequence는 데이터베이스에서 순번을 생성하고 제어하는 데에 유용한 도구이다.
고유한 값이 필요한 경우, Sequence를 활용하여 효율적으로 값을 생성할 수 있다.
Sequence를 적절히 활용하면 데이터베이스의 성능을 향상하고, 데이터의 무결성을 유지하는 데에 도움이 된다.
특히, 여러 테이블에서 동일한 시퀀스를 사용하여 외래키 값을 생성하는 경우, 데이터 일관성과 유지보수성을 높일 수 있다.
중복되지 않고 고유한 값을 생성하고 각 테이블의 관계를 명확하게 유지가 가능하여 유용하게 사용했다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/018.gif)
반응형
'Dev > DB' 카테고리의 다른 글
[ORACLE] 트리거(Trigger)를 이용한 테이블 수정 이력 관리 (0) | 2024.06.21 |
---|---|
[ORACLE] 데이터 랜덤값으로 변경하기(dbms_random) (0) | 2024.04.30 |
[ORACLE] ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE (0) | 2024.02.29 |
[ORACLE] Timestamp를 이용하여 데이터 복구 (2) | 2024.01.17 |
[ORACLE] ORA-12170: TNS:Connect timeout occurred (0) | 2023.08.28 |