-
Oracle - SEQUENCE데이터베이스/Oracle 2020. 11. 28. 01:46728x90반응형
SEQUENCE
SEQUENCE란 순차적으로 정수 값을 자동으로 생성하는 객체로 자동 번호 발생기 역할을 한다.
게시판 넘버나 회원번호 같은 곳에 많이 사용된다.
표현식은 이러하다.
각 설명은 아래와 같다.
- START WITH : 처음 발생시킬 시작 값, 기본값 1
- INCREMENT BY : 다음 값에 대한 증가치, 기본값 1
- MAXVALUE | NOMAXVALUE : 발생시킬 최대값, 10의 27승-1까지 가능
- MINVALUE | NOMINVALUE : 발생시킬 최소값, -10의 26승
- CYCLE | NOCYCLE : 시퀀스가 최대값까지 증가 완료 시 CYCLE은 START WITH 설정 값으로 돌아간다 NOCYCLE은 에러 발생이다.
- CACHE | NOCACHE : CACHE는 메모리 상에서 시퀀스 값을 관리한다. 기본값은 20이다. 캐쉬 메모리 크기를 지정한다.
시퀀스의 캐쉬메모리는 할당된 크기 만큼 미리 다음 값을 생성해서 저장해둔다.
다음 시퀀스 호출 시 저장된 값을 반환하므로 속도가 빠르다.(DB속도 향상)
NEXTVAL / CURRCAL
NEXTVAL이란 시퀀스 값을 INCREMENT 값 만큼 증가시킨 값을 반환한다.
CURRVAL이란 현재 생성된 시퀀스 값을 반환한다.
SELECT SEQ_EMP_ID.NEXTVAL FROM DUAL; -- 초기값 300 호출 SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 300 호출 SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 305 호출 SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 310 호출 SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; -- 에러(최대값 초과)
NEXTVAL / CURRCAL 사용 가능 여부
사용 가능 여부는 이러하다.
사용 가능한 경우
- 메인쿼리(서브쿼리가 아닌 SELECT문)의 SELECT절
- INSERT문의 서브쿼리 SELECT절
- INSERT문의 VALUES절
- UPDATE문의 SET절
사용 불가능한 경우
- VIEW의 SELECT절
- DISTINCT가 있는 SELECT절
- GROUP BY, HAVING, ORDER BY절이 포함된 SELECT문
- SELECT, DELETE, UPDATE문의 서브쿼리
- CREATE TABLE, ALTER TABLE의 DEFAULT 값[ SEQUENCE 예시 ]
CREATE SEQUENCE SEQ_EMPID START WITH 300 -- 시작값 INCREMENT BY 5 -- 증가값 MAXVALUE 310 -- 최대값 NOCYCLE -- 반복 NOCACHE;
SEQUENCE 수정
시퀀스 수정 시 CREATE에 사용한 옵션을 변경이 가능하다.
단 START WITH 값 변경은 불가하기 때문에 변경하려면 삭제 후 다시 생성해야 한다.
[ 작성법 ]
ALTER SEQUENCE 시퀀스명
[INCREMENT BY 정수] - 다음 값에 대한 증가치, 생략 시 기본 값 1로 지정.
[MAXVALUE | NOMAXVALUE] - 발생시킬 최대값을 지정(10^27-1 == 0이 27개인 수 - 1), NOMAXVALUE 기본 값
[MINVALUE | NOMINVALUE] - 발생시킬 최소값을 지정(-10^26 == 0이 26개인 수), NOMINVALUE 기본 값
[CYCLE | NOCYCLE] - 값 순환 여부를 지정, NOCYCLE 기본 값
[CACHE | NOCACHE] - 캐쉬메모리 크기 지정.[START WITH] 를 제외하고 생성과 동일하다.
삭제는 DROP SEQUENCE 시퀀스명; 으로 한다.
[ SEQUENCE 변경 예시 ]
ALTER SEQUENCE SEQ_EMPID INCREMENT BY 10 MAXVALUE 400 NOCYCLE NOCACHE;
728x90반응형'데이터베이스 > Oracle' 카테고리의 다른 글
Oracle - SYNONYM (0) 2020.11.28 Oracle - INDEX (0) 2020.11.28 Oracle - View (0) 2020.11.23 Oracle - DDL (Data Definition Language) ALTER, DROP - Part 3 (0) 2020.11.22 Oracle - DML(Data ManipulationLanguage) DELETE - Part 3 (0) 2020.11.20