본문 바로가기

SQL + PL/SQL/SQL

SEQUENCE - 시퀀스

SEQUENCE


연속적인 번호의 생성이 필요할 때 쓰는 기능

연속적인 일련번호를 자동으로 만들어주는 기능이 SEQUENCE

주문번호나 게시글번호 등을 생성할 때 유용하게 사용되는 기능이다.

SEQUENCE를 사용하는 DML이 ROLLBACK 되어도 시퀀스는 안됨


문법: 

CREATE SEQUENCE 시퀀스이름

INCREMENT BY 숫자

START WITH 숫자

MAXVALUE 숫자

MINVALUE 숫자

CYCLE 

CACHE 숫자


문법설명:

INCREMENT BY 숫자 --> 증가값, 감소는 마이너스로 설정하면 됨 (마이너스로 설정할 경우 MAXVALUE와 MINVALUE의 기능은 바뀌게 됨)

START WITH 숫자 --> 시퀀스 시작번호 설정

MAXVALUE 숫자 --> 시퀀스 최대값

MINVALUE 숫자 --> CYCLE 설정했을 때 MAXVALUE값 다 쓰고 난 후 다음 새로 시작되는 값

CYCLE --> 시퀀스 번호를 순환 사용할 것인지 설정 

CACHE 숫자 --> 나올 번호들을 메모리상에 만들어두는걸 캐싱, SEQUENCE 번호 요청이 들어오면 미리 메모리에 빼논 번호를 즉시 할당하게 하는 기능, 몇개까지 미리 뽑아놀 건지 설정, 성능 개선! 꼭 사용하길 권장함, 문제점은 갑자기 서버DB가 꺼져버리면 미리 뽑아논 SEQUENCE 번호들이 사라지기 때문에, 캐싱되었던 번호가 사라지기 때문에 중간에 번호가 비는 경우가 생김.



SEQUENCE 활용해서 데이터 입력하기


문법: 

INSERT INTO 테이블

VALUES(시퀀스이름.NEXTVAL) ;


NEXTVAL = 현재값보다 다음 값을 가져오라는 함수 (맨 처음, START WITH에 쓴 값도 이 NEXTVAL을 써줘야함)


지금까지 나온 SEQUENCE 값을 확인하려면

SELECT 시퀀스이름.CURRVAL FROM DUAL ;

하면 이때까지 나온 값, 즉 마지막 값을 볼 수 있음





SEQUENCE 조회

사용하는 딕셔너리는 USER_SEQUENCES


SELECT SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG, ORDER_FLAG, CACHE_SIZE, LAST_NAMBER

FROM USER_SEQUENCES

WHERE SEQUENCE_NAME='시퀀스이름대문자' ;



SEQUENCE 수정


문법:

ALTER SEQUENCE 시퀀스이름

MAXVALUE / MINVALUE / CACHE 


주의! 다른건 수정할 수 있지만 START WITH 값은 변경 안됨! 수정할 수 없음




SEQUENCE 삭제


문법:

DROP SEQUENCE 시퀀스이름 ;


주의! 아까도 말했듯이 ROLLBACK 안됨










'SQL + PL/SQL > SQL' 카테고리의 다른 글

HIERACHICAL QUERY - 계층형 쿼리  (0) 2013.01.13
SYNONYM  (0) 2013.01.13
VIEW - 뷰  (0) 2013.01.13
INDEX - 인덱스  (0) 2013.01.13
CONSTRAINT - 제약조건  (0) 2013.01.13