[DB]/04. Oracle Object
02. SEQUENCE (시퀀스)
76beny
2022. 5. 14. 20:25
SEQUENCE
■ 자동 번호 발생기 역할로 사용자가 정해준 숫자로부터 일정 숫자가 자동으로 증감되는 객체
■ 주사용처 : 사번, 주문번호, 게시판번호 등의 일련번호
■ 응용 : 코드화 해서 활용됨 ex) 100xxxxxxx -> 전자제품 200xxxxxxx -> 식품
문법
CREATE SEQUENCE '시퀀스 명'
[START WITH 숫자] -- 처음 시작되는 숫자, default : 1
[INCREMENT BY 숫자] -- 증감되는 수, default : 1
[MAXVALUE 숫자 | NOMAXVALUE] -- 최대값 default : 10^27
[MINVALUE 숫자 | NOMINVALUE] -- 최소값 default : -10^28
[CYCLE | NOCYCLE] -- 값의 순환여부. NO CYCLE일 경우 MAX값 이후로 생성되지 않음 -> ERROR 발생 -- Default : NO CYCLE
[CACHE <byte 크기> | NOCACHE] -- 메모리 상에 시퀀스 값 관리 여부, default : 20
-- ※ 주의 : SEQUENCE는 최초 생성 이후 증감하지 않으면 사용할수 없음. NEXTVAL 명령 사용 필요
■ 예시
CREATE SEQUENCE SEQ_EMPID
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;
SELECT SEQ_EMPID.CURRVAL FROM DUAL;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL;
SELECT SEQ_EMPID.CURRVAL FROM DUAL;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL;
SELECT SEQ_EMPID.NEXTVAL FROM DUAL;
■ 시퀀스 조회방법
SELECT * FROM USER_SEQUENCES;
NEXTVAL/CURRVAL 사용 가능 여부
■ 사용법
-- '시퀀스명'.NEXTVAL : 증감되는 다음 값을 가져오는 명령어
-- '시퀀스명'.CURRVAL : 현재 값을 가져오는 명령어
사용가능 | 사용불가 |
서브쿼리가 아닌 SELECT문 | VIEW의 SELECT절 |
INSERT문의 SELECT절 | DISTINCT 키워드가 있는 SELECT문 |
INSERT문의 VALUE절 | GROUP BY, HAVING, ORDER BY 절이 있는 SELECT문 |
UPDATE문의 SET절 | SELECT, DELETE, UPDATE의 서브쿼리 |
CREATE TABLE, ALTER TABLE 명령의 DEFAULT값 |
DROP SEQUENCE SEQ_TEST1;-- 시퀀스 삭제하는 방법
CREATE SEQUENCE SEQ_TEST1; -- 일반적으로 SEQ 같이 시퀀스 표식을 붙여서 사용;
SELECT SEQ_TEST1.NEXTVAL FROM DUAL; -- 증감 방법(시퀀스를 생성하고 최초1회사용이 필요)
SELECT SEQ_TEST1.CURRVAL FROM DUAL; -- 최초 1회 증감 이후에 조회가 가능하다.
시퀀스 응용
■ 초기화 방법
■ 일반적인 초기화 문법 제공하지 않음. DROP -> CREATE 활용
-- 시퀀스 응용
-- 300부터 시작해서 5씩 증가하고, 최대 310까 사용하고, NO CACHE, NO CYCLE
CREATE SEQUENCE SEQ_TEST2
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCACHE;
SELECT SEQ_TEST2.NEXTVAL FROM DUAL;
--1번RUN하면 300, 2번째 RUN하면 305,3번째 RUN하면 310!!!
-- 310 초과하면 ERROR 발생
-- 최종적으로 증감된 시퀀스는 재사용 불가능!! -> DROP 이후 재사용필요.
시퀀스 수정&삭제
■ 삭제
DROP SEQUENCE SEQ_TEST2;
■ 수정
ALTER SEQUENCE SEQ_TEST1;
시퀀스 실제 사용예시
DROP TABLE TBL_KH_USER;
CREATE TABLE TBL_KH_USER(
USER_NO NUMBER PRIMARY KEY, -- 시퀀스 번호로 자동 사번 생성
USER_ID VARCHAR2(30) NOT NULL UNIQUE,
USER_NAME VARCHAR2(30) NOT NULL
);
DROP SEQUENCE SEQ_USER_NO;
CREATE SEQUENCE SEQ_USER_NO START WITH 10000;
--SEQ_USER_NO.NEXTVAL; -- 숫자확인을 위해 DUAL 사용 권고
--SELECT SEQ_USER_NO.NEXTVAL FROM DUAL;
INSERT INTO TBL_KH_USER VALUES(SEQ_USER_NO.NEXTVAL, 'TEST1', '홍길동');
INSERT INTO TBL_KH_USER VALUES(SEQ_USER_NO.NEXTVAL, 'TEST2', '김길동');
SELECT * FROM TBL_KH_USER;
"본 인터넷 사이트 내의 모든 이미지, 문구, 콘텐츠, 내용 등에 대한 저작권은 76beny에게 있습니다.
이를 무단으로 도용, 복사, 전재, 재배포, 2차 변형 등을 할 경우
민, 형사상 법적 조치 등 저작권법에 의거하여 처벌 받을 수 있습니다."