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 |