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 |