DB/SQL

OBJECT - SEQUENCE

제주니어 2022. 9. 8. 19:03

SEQUENCE

  • SEQUENCE는 오라클에서 제공하는 객체로 순차적으로 정수 값을 자동으로 생성한다.

 

SEQUENCE 생성

  • SEQUENCE는 CREATE 구문을 사용해서 생성한다.
CREATE SEQUENCE 시퀀스명
    [START WITH 숫자]	
    [INCREMENT BY 숫자]
    [MAXVALUE 숫자]
    [MINVALUE 숫자]
    [CYCLE | NOCYCLE]	
    [CACHE | NOCACHE]

VIEW 옵션

-- EMPLOYEE 테이블의 PK 값을 생성할 시퀀스 생성
CREATE SEQUENCE SEQ_EMPNO
START WITH 300 -- 300부터 시작
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;

* 현재 계정이 가지고 있는 시퀀스들에 대한 정보를 조회하는 데이터 딕셔너리

SELECT * FROM USER_SEQUENCES;

 

SEQUENCE 사용

  • NEXTVAL는 시퀀스 값을 증가시키고 증가된 시퀀스 값을 리턴한다.
  • CURRVAL는 현재 시퀀스의 값을 리턴하며, NEXTVAL에서 성공한 값을 저장하고 리턴한다. 단, 무조건 처음에는 한번 NEXTVAL를 사용해야 한다. 
시퀀스명.NEXTVAL;
시퀀스명.CURRVAL;
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;
-- NEXTVAL를 한 번이라도 수행하지 않는 이상 CURRVAL를 가져올 수 없다. 
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 300
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 305
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 310
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 지정한 MAXVALUE 값(310)을 초과했기 때문에 에러 발생

-- 매번 새로운 사번이 발생되는 시퀀드 생성
CREATE SEQUENCE SEQ_EMPID
START WITH 300;

SELECT * FROM USER_SEQUENCES;

INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO) 
VALUES(SEQ_EMPID.NEXTVAL, '홍길동', '800416-1234567');

INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO) 
VALUES(SEQ_EMPID.NEXTVAL, '이몽룡', '800416-1234567');

 

SEQUENCE 수정

  • SEQUENCE 수정 시 ALTER 구문을 사용해서 수정한다.
  • 단, START WITH 값 변경은 불가하기 때문에 변경하려면 삭제 후 다시 생성해야 한다. 
ALTER SEQUENCE 시퀀스명
    [INCREMENT BY 숫자]
    [MAXVALUE 숫자]
    [MINVALUE 숫자]
    [CYCLE | NOCYCLE]	
    [CACHE | NOCACHE]
ALTER SEQUENCE SEQ_EMPNO
--START WITH 200; -- ERROR
INCREMENT BY 10
MAXVALUE 400;

SELECT * FROM USER_SEQUENCES;

SELECT SEQ_EMPNO.CURRVAL FROM DUAL; -- 310
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; -- 320

 

SEQUENCE 삭제

  • SEQUENCE 삭제 시 DROP 구문을 사용해서 삭제한다.

'DB > SQL' 카테고리의 다른 글

OBJECT - SYNONYM  (0) 2022.09.10
OBJECT - INDEX  (0) 2022.09.09
OBJECT - VIEW  (1) 2022.09.07
DCL(Data Control Language)  (0) 2022.09.06
TCL(Transaction Control Language)  (0) 2022.09.05