SEQUENCE 시퀀스
-자동으로 번호를 발생시켜주는 역할을 하는 객체
- 정수값을 자동으로 순차적으로 생성해줌
--> 일련번호를 부여하여 자동증가 값을 생성
- 독립적인 객체로, 테이블과는 별개로 동작
예) 회원번호, 사번, 게시글번호 등등 채번시 사용
시퀀스 객체 생성방법
CREATE SEQUENCE 시퀀스명
(START WITH 시작숫자) 처음 발생시킬 시작값 지정 [DEFAULT 1] / 변경(ALTER)불가!
(INCREMENT BY 증가값) 몇 씩 증가시킬건지 지정, [DEFAULT 1]
(MAXVALUE) 최대값지정
(MINVALUE) 최솟값지정 [DEFAULT 1]
(CYCLE /NOCYCLE) 값 순환여부 지정 [DEFAULT NOCYCLE]
(CACHE 바이트크기 / NOCACHE) 캐시메모리 사용여부, 기본값 20byte
;
**** SEQUENCE CACHE MEMORY: 미리 발생할 값들을 생성해서 저장해두는 공간
매번 호출시마다 새로 번호를 생성하는 것은 비효율적.
캐시메모리 공간에 미리 생성된 값들을 가져다 쓰게하여 속도를 높임
CREATE SEQUENCE SEQ_EMPNO
START WITH 300 -- 지삭값
INCREMENT BY 5 --증가값
MAXVALUE 310 -- 최대값
NOCYCLE-- 반복 X
NOCACHE; --캐시사용 X
CREATE SEQUENCE MEM_ORDER
START WITH 10
INCREMENT BY 1
MINVALUE 5
MAXVALUE 15
CYCLE
CACHE 10;
SELECT MEM_ORDER.CURRVAL FROM DUAL;
SELECT MEM_ORDER.NEXTVAL FROM DUAL;
CURRVAL, NEXTVAL
* 시퀀스 값 증가 Operator => NEXTVAL
* 현재 시퀀스 조회Operator => CURRVAL
(NEXTVAL 최초 1회 실행 후 CURRVAL조회가능)
*CURRVAL, NEXTVAL 사용이 가능한 구문
- 서브쿼리가 아닌 SELECT문
- INSERT문의 SELECT절
- INSERT문의 VALUE절
- UPDATE문의 SET절
시퀀스명.CURRVAL : 현재 시퀀스값 (마지막으로 성공적으로 발생된 NEXTVAL 값)
시퀀스명.NEXTVAL : 시퀀스값을 증가시키고 증가된 시퀀스값
기존의 시퀀스값에서 INCREMENT BY값만큼 증가된 값
(시퀀스명.CURRVAL + INCREMENT BY값)
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;
-- ORA-08002: sequence SEQ_EMPNO.CURRVAL is not yet defined in this session
--> NEXTVAL을 1회이상 수행하지 않으면 CURRVAL은 수행할 수 없음
SELECT * FROM USER_SEQUENCES;
-- LAST NUMBER: 현 상황에서 NEXTVAL을 실행할 경우 예정 값
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; 300
SELECT SEQ_EMPNO.CURRVAL FROM DUAL 300
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; 305
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; 310
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL;
-- ORA-08004: sequence SEQ_EMPNO.NEXTVAL exceeds MAXVALUE and cannot be instantiated
SELECT SEQ_EMPNO.CURRVAL FROM DUAL;
시퀀스 변경
ALTER SEQUENCE 시퀀스명
**시작값은 변경불가, 나머지는 변경가능
ALTER SEQUENCE SEQ_EMPNO
INCREMENT BY 10
MAXVALUE 400;
SELECT SEQ_EMPNO.CURRVAL FROM DUAL; --310
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; --320
SELECT SEQ_EMPNO.NEXTVAL FROM DUAL; --330
---------------------------------------------------------------
CREATE SEQUENCE SEQ_EID
START WITH 300;
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, JOB_CODE ,SAL_LEVEL)
VALUES ( SEQ_EID.NEXTVAL, '시퀀스맨', '123123123', 'J3', 'S3');
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, JOB_CODE ,SAL_LEVEL)
VALUES ( SEQ_EID.NEXTVAL, '시퀀스맨2', '123123123', 'J3', 'S3');
SELECT * FROM EMPLOYEE;
'Database' 카테고리의 다른 글
[SQL] 뷰 VIEW (1) | 2022.10.05 |
---|---|
[SQL] TCL(COMMIT, ROLLBACK, SAVEPOINT) (1) | 2022.10.05 |
[SQL] DCL - GRANT, REVOKE (1) | 2022.10.05 |
[SQL] DDL - CREATE/ ALTER/ DROP (0) | 2022.10.05 |
[SQL] DML - INSERT/ UPDATE /DELETE (0) | 2022.10.04 |