본문 바로가기
DB

[SQL] OBJECT SEQUENCE - 순차적 번호 생성

by chan10 2021. 3. 23.

OBJECT SEQUENCE

o  순차적으로 정수 값을 자동으로 생성하는 객체로 자동 번호 발생기 역할을 한다.

옵션을 지정하지 않아도 호출 시 자동으로 1씩 증가한다.

표현식

CREATE SEQUENCE 시퀀스명[옵션]

시퀀스작동 예약어 시퀀스.NEXTVAL, 시퀀스.CURRVAL를 사용하여 생성한 시퀀스를 사용할 수 있다.

NEXTVAL, CURRVAL - 동일한 세션에서 CURRVAL를 출력하려면 NEXTVAL을 출력하고 실행해야 한다.

 

NEXTVAL/CURRVAL 사용 가능 여부

 

시퀀스 생성하기

-- 1부터 실행, 실행 시 마다 1씩 증가
-- 장점 : 자동으로 증가하기에 중복값을 체크하지 않아도된다.
CREATE SEQUENCE SEQ_BASIC;
SELECT SEQ_BASIC.NEXTVAL FROM DUAL;

SELECT SEQ_BASIC.CURRVAL FROM DUAL; -- 현재 시퀀스 값 확인

 

CREATE SEQUENCE SEQ_OPTION

START WITH 100 -- 시작 값

INCREMENT BY 10; -- 증가 값

SELECT SEQ_OPTION.NEXTVAL FROM DUAL; -- 100부터 시작, 10씩 증가

 

CREATE SEQUENCE SEQ_OPTION2

START WITH 60

INCREMENT BY 6

MAXVALUE 90 MINVALUE 0

CYCLE                 -- CYCLE 선언 시 MAXVALUEM, MINVALUE 값이 있어야 한다.

                          -- CYCLE 순환 범위(MINVALUE ~ MAXVALUEM)를 지정해 줘야하기 때문이다.

NOCACHE;

 

SELECT SEQ_OPTION2.NEXTVAL FROM DUAL;

 

시퀀스 활용하기 - PK값으로 설정하기

CREATE TABLE BOARD_SEQ(

    BOARD_NO NUMBER PRIMARY KEY,

    BOARD_TITLE VARCHAR2(200) NOT NULL,

    BOARD_CONTENT VARCHAR2(800),

    BOARD_WRITER VARCHAR2(20) REFERENCES EMPLOYEE(EMP_ID),

    BOARD_DATE DATE

);

 

CREATE SEQUENCE SEQ_BOARD;

INSERT INTO BOARD_SEQ VALUES (SEQ_BOARD.NEXTVAL,'제목1','내용1','200',SYSDATE);

SELECT * FROM BOARD_SEQ;

-       컬럼 BOARD_NO의 데이터를 SEQUENCE를 넣음으로써 중복이 없다.

 

-- SEQUENCE 정보 조회하기

SELECT * FROM USER_SEQUENCES;

 

-- SEQUENCE 이용 다른 활용하기

SELECT 'B_'||SEQ_BOARD.NEXTVAL FROM DUAL;

 

-- SEQUENCE 수정하기

ALTER SEQUENCE SEQ_BOARD INCREMENT BY 10;

 

-- 시퀀스 지우기

DROP SEQUENCE SEQ_BOARD;

 

o  SEQUENCE를 사용할 수 없는 구문

VIEW구문에서 사용불가

DISTINCT를 포함하고 있는 구문

GROUP BY HAVING ORDER BY 포함된 구문

SELELCT, DELETE, UPDATE 서브쿼리

CREATE TABLE, ALTER TABLE에서 DEFAULT 사용 못함