시퀀스는 호출될 때마다 자동으로 유일한 숫자를 생성하는 오라클 객체입니다. 예를 들어 게시판의 글 번호가 순차적으로 넘버링될 수 있도록 시퀀스를 사용합니다.
1. 시퀀스 생성
시퀀스를 생성하는 기본 문법입니다.
CREATE SEQUENCE 시퀀스명
[START WITH n]
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE]
START WITH n 은 시작값을 지정할 때 사용하며, 생략시 1부터 시작합니다.
INCREMENT BY n 은 증가값을 지정할 때 사용하며, 생략시 1부터 시작합니다.
MAXVALUE n 은 최대값을 지정할 때 사용하며, 생략시 오라클이 자동으로 매우 큰 숫자로 설정합니다.
MINVALUE n 은 최소값을 지정하며 CYCLE인 경우에는 반복 후 새로 시작하는 값 역할을 합니다.
CYCLE 옵션은 최대값까지 증가가 완료된 후 다시 시작할 것인지 끝낼 것인지를 결정합니다.
CACHE 옵션은 메모리상의 시퀀스값을 미리 만들어서 필요시 바로 제공하는 방법입니다.
부서 번호를 자동으로 부여해 주는 시퀀스 객체를 생성해 보겠습니다.
CREATE SEQUENCE dept_deptno_seq
START WITH 10
INCREMENT BY 10
MAXVALUE 100
MINVALUE 5
CYCLE
NOCACHE;
시퀀스가 생성되고 나면, NEXTVAL를 먼저 호출한 후 CURRVAL로 현재 시퀀스 값을 얻어올 수 있습니다. NEXTVAL을 호출할 때마다 10씩 증가하고 최대값인 100에 도달한 후에는 최소값인 5부터 다시 시퀀스가 시작됩니다.
SELECT dept_deptno_seq.NEXTVAL, dept_deptno_seq.CURRVAL
FROM DUAL;
증가값은 음수로 지정할 수도 있습니다. 다음과 같이 음수 지정 시 시작값 100에서 10씩 감소하다가, 최소값인 10에 도달하면 최대값인 150부터 다시 시퀀스를 시작하게 됩니다.
CREATE SEQUENCE dept_deptno_seq2
START WITH 100
INCREMENT BY -10
MAXVALUE 150
MINVALUE 10
CYCLE
NOCACHE;
이를 이용해 사원 번호를 자동 생성하는 시퀀스를 만들어 보겠습니다.
CREATE SEQUENCE emp_seq
START WITH 100
INCREMENT BY 1
MAXVALUE 9999
NOCYCLE
NOCACHE;
이 시퀀스를 통해 사원 번호를 자동 생성하여 emp 테이블에 사원 3명을 입력해 보겠습니다.
INSERT INTO emp (empno, ename)
VALUES (emp_seq.NEXTVAL, '김봄');
INSERT INTO emp (empno, ename)
VALUES (emp_seq.NEXTVAL, '이여름');
INSERT INTO emp (empno, ename)
VALUES (emp_seq.NEXTVAL, '박가을');
사원들의 사원 번호가 시작값인 100부터 순차적으로 자동 넘버링된 것을 볼 수 있습니다.
2. 시퀀스 수정
ALTER SEQUENCE 문을 사용하여 시퀀스를 수정할 수 있습니다. 시퀀스가 변경되면 다음 시퀀스 값부터 반영이 되며, START WITH 값은 변경 불가능합니다.
옵션 없이 시퀀스를 생성해 보겠습니다.
CREATE SEQUENCE dept_deptno_seq3;
데이터 사전에서 시퀀스를 확인할 수 있습니다.
SELECT *
FROM user_sequences
WHERE sequence_name='DEPT_DEPTNO_SEQ3';
기본값으로 설정된 시퀀스를 증가값 10, 사이클 옵션으로 수정해 보겠습니다.
ALTER SEQUENCE dept_deptno_seq3
INCREMENT BY 10
CYCLE;
데이터 사전에서 변경된 사항을 확인할 수 있습니다.
3. 시퀀스 삭제
DROP을 사용하여 시퀀스를 삭제할 수 있습니다.
DROP SEQUENCE emp_seq;
이상은 시퀀스 객체에 대한 내용이었습니다.
'Database > Oracle' 카테고리의 다른 글
[Oracle SQL] DDL - 테이블 변경(ALTER) 및 삭제(DROP) (0) | 2022.05.15 |
---|---|
[Oracle SQL] DDL - 테이블 생성(CREATE), 제약 조건 (0) | 2022.05.14 |
[Oracle SQL] DML - UPDATE문, DELETE문 (0) | 2022.05.14 |
[Oracle SQL] DML - INSERT문 (0) | 2022.05.14 |
[Oracle SQL] 서브쿼리 (0) | 2022.05.12 |
댓글