《Sequence 정의》
1. 유일한(UNIQUE)한 값을 생성해주는 오라클 객체이다.
2. 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
보통 Primary Key 값을 생성하기 위해 사용한다.
3. 메모리에 Cache 되었을때 Sequence값의 액세스 효율이 증가한다.
4. 테이블과는 독립적으로 저장되고 생성된다.
따라서 하나의 Sequence를 여러 테이블에서 쓸수 있다.
5. INSERT시 NEXTVAL 구문자체가 시퀀스의 현재값(CURRVAL)을 정의된 증가치(INCREMENT BY)
만큼 증가시키고 결과를 리턴해 준다.
《Sequence 생성》
SQL> CREATE SEQUENCE seq_test(시퀀스명);
☞ Sequence 지정 옵션
START WITH 1 -- 시작값(변경불가능)
INCREMENT BY 1 -- 1씩 증가
MAXVALUE 1000 -- seq의 최대값
MINVALUE 1 -- 최소값(다시 시작할때 시작되는 값)
CACHE 20 -- 캐쉬메모리(최대 20개)
ORDER -- 정렬
CYCLE -- Recycle(최대값이 지나면 다시 시작해서 사용)
《지정옵션》
START WITH : 시퀀스의 시작값을 지정한다. 지정한 값부터 순차적으로 시퀀스번호가 증가
한다. 시퀀스 옵션은 대부분 변경할 수 있지만 START WITH로 지정한
초기값은 바꿀수 없다.
INCREMENT BY : 시퀀스를 얼마씩 증가시킬 것인가를 지정한다. 만약 음수로 설정하면
시퀀스 값은 계속해서 감소하게 된다.
MAXVALUE : 시퀀스의 최대값
NOMAXVALUE는 최대값을 무한대로 지정한다.
MINVALUE : 시퀀스의 최소값
기본값은 1
NOMINVALUE를 지정할 경우 최소값은 무한대가 된다.
CACHE : 시퀀스를 빨리 제공하기 위해 미리 메모리에 Cache개 만큼의 시퀀스를 만들어 준비
해 두고 있다. 메모리에 Cache 되었을 때 시퀀스 값의 액세스 효율이 증가한다.
(디폴트는 20개)
오라클에서는 Cache개 만큼의 시퀀스를 미리 메모리에 보관하고 있기 때문에 만약
시스템이 비정상적으로 종료된다면 그 내용이 모두 사라지게 된다.
따라서 나중에 시퀀스를 새롭게 사용할 때는 Cache에 들어있던 내용 다음부터 시작
하게 된다.
ORDER : 시퀀스는 주로 키 값을 만들어 내기 위한 목적으로 사용되기 때문에 실제의 값 보다
는 유일성이 가장 중요시된다. 오라클 병렬 서버를 병렬모드로 사용하는 경우 짧은
시간에 여러 사용자가 시퀀스를 사용하면 요청 순서에 따라 시퀀스 값이 할당되지
않을 수도 있다. 만약 요청 순서에 따라서 정확하게 시퀀스 값을 제공하고 싶다면
ORDER 옵션을 지정해야 한다.
(디폴트는 NOORDER)
병렬 서버가 아닌 경우에는 옵션과 관계없이 요청 순서에 따라 시퀀스가 정확하게
할당된다.
CYCLE : 시퀀스를 사용하다가 MAXVALUE에 도달하면 다시 MINVALUE부터 시작하라는
옵션.(디폴트는 NOCYCLE)
《사용자 Sequence 조회》
SQL> SELECT * FROM USER_SEQUENCES ;
《현재값 확인》
SQL> SELECT seq_test.CURRVAL FROM DUAL;
※ 처음부터 CURRVAL 확인할 경우 오라클 에러 생김.
ORA-08002: sequence SQ_WWN.CURRVAL is not yet defined in this session
CURRVAL은 NEXTVAL 사용후에야 같은 세션에서 사용이 가능하다.
그냥 단지..마지막 시퀀스를 조회하고 싶을때는
SQL> SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'seq_test';
-> LAST_NUMBER(마지막 시퀀스)값 확인
《다음 Sequence 확인》
SQL> SELECT seq_test.NEXTVAL FROM DUAL;
시퀀스 증가는 seq_test.NEXTVAL
(NEXTVAL은 전의 값으로 되돌릴 수 없다.)
CURRVAL, NEXTVAL 사용할 수 있는 경우
-. SubQuery가 아닌 SELECT문
-. INSERT문의 SELECT절
-. INSERT문의 VALUE절
-. UPDATE문의 SET절
《Sequence 변경》
SQL> ALTER SEQUENCE seq_TEST INCREMENT BY 3 NOCACHE;
시퀀스 변경시 START WITH 값은 변경 불가능(변경할려면 지우고 다시 생성)
《Sequence 삭제》
SQL> DROP SEQUENCE seq_test;
[출처] 시퀀스(Sequence)|작성자 순둥이
oracle 시/분/초 더하기.. (0) | 2016.11.11 |
---|---|
특정 필드가 포함된 테이블 . PK필드 조회하기 (0) | 2013.04.09 |
Oracle 각종 함수 (0) | 2010.12.23 |
Table 생성 & 수정 (0) | 2009.10.08 |