💡시퀀스
시퀀스(Sequence)는 일련 번호를 생성한다.
시퀀스는 데이터베이스 객체 중 하나로, 오라클 전용 객체이므로 다른 DBMS 제품에는 없다.
주로 식별자(일련번호)를 만드는데 사용하며, 기본값(PK)으로 사용되는 경우가 많다.
CREATE SEQUENCE seqNum;
SELECT seqNum.nextVal FROM dual; --일련 번호 생성
호출할 때마다 숫자를 증가하면서 돌려준다.
일련번호를 생성하고 있는 것을 확인할 수 있다.
시퀀스 객체 생성하기
CREATE SEQUENCE 시퀀스명;
시퀀스 객체 삭제하기
DROP SEQUENCE 시퀀스명;
시퀀스 객체 사용하기(함수)
시퀀스객체.nextVal
시퀀스객체.currVal
시퀀스의 사용
CREATE TABLE tblMemo
(
seq number(3),
name varchar2(30),
memo varchar2(1000),
regdate DATE NOT NULL,
--테이블 수준에서 제약 사항 정의
CONSTRAINT tblMemo_seq_pk PRIMARY KEY(seq),
CONSTRAINT tblMemo_memo_ck CHECK (LENGTH(memo) >= 3)
);
CREATE SEQUENCE seqMemo;
INSERT INTO tblMemo (seq, name, memo, regdate) VALUES(seqMemo.nextVal, 'Isaac', 'Memo입니다.', sysdate); --5번 실행
SELECT * FROM tblMemo;
회원 추가 코드를 5번 반복 실행하였다.
일련번호를 seq에 저장하도록 하였다. seq에 1씩 증가하여 저장되는 것을 확인할 수 있다.
문자 혼합
SELECT 'A' || seqNum.nextVal FROM dual; -- A41
일련번호로 사용하고자 할 때, '||' 기호로 문자를 혼합하여 사용할 수 있다.
currVal
SELECT seqNum.currVal FROM dual;
nextVal을 호출하면 나오게 될 숫자를 반환하지만, currVal은 Java Queue, Stack에서의 pop(), peek() 기능처럼 데이터를 증가하지 않고 확인만 하는 기능을 한다.
currVal은 최소 1번 이상의 nextVal을 호출해야 사용할 수 있다.
💡시퀀스 옵션
create sequence 시퀀스명
increment by n --증감치
start with n
maxvalue n
minvalue n
cycle cache n;
옵션을 추가하여 시퀀스 객체를 생성할 수 있다.
increment
CREATE SEQUENCE seqTest
INCREMENT BY 10;
SELECT seqTest.nextVal FROM dual;
일련번호가 1씩 증가하는 건 시퀀스의 특징이 아니라 increment 옵션을 그렇게 주었기 때문이다.
숫자가 증가만 되는 게 아니라 감소가 되게끔 만드는 것도 가능하다.
start with
CREATE SEQUENCE seqTest
START WITH 10;
SELECT seqTest.nextVal FROM dual;
start with를 설정하면 내가 원하는 숫자부터 시작되게 할 수 있다.
maxvalue/minvalue
CREATE SEQUENCE seqTest
MAXVALUE 10;
--ORA-08004: sequence SEQTEST.NEXTVAL exceeds MAXVALUE and cannot be instantiated
SELECT seqTest.nextVal FROM dual;
maxvalue를 설정하면 데이터가 증가할 최대값을 설정할 수 있다.
만약 데이터가 증가할 수 있는 범위를 벗어날 경우 에러를 출력한다.
minvalue으로 데이터가 감소할 최소값을 설정할 수 있다.
cycle cache
CREATE SEQUENCE seqTest
MAXVALUE 10
CYCLE
cache 5;
SELECT seqTest.nextVal FROM dual;
일련번호가 10을 넘자 다시 처음 1로 돌아갔다.
순환하는 번호가 필요할 때 cycle cache를 사용한다.
물론 이때는 일련번호로서는 사용할 수 없다.