본문 바로가기

DATABASE

[Oracle ] Sequence

[출처] [SQL] sequence|작성자 bluekisunny


= 자동으로 번호를 부여하는 방법.
순서대로 숫자값을 얻어서 primary key나 unique key로 주로 사용한다. 특히나 많은 사용자가 동시에 DB를 사용할 때는 Unique한 컬럼의 데이터가 중복되어 에러가 발생하는 경우가 종종 생기는데, 이경우 사용할 수 있는 값이 sequence이다.

번호 조회시점에서 자신도 증가하고, 증가시킨 숫자값을 돌려주기때문에 아무리 동시작업일 경우에도 근본적으로 중복값으로 오는 문제점을 해결할수 있다.


◎ 사용법

 

sequence는 테이블처럼 sequence를 생성시켜서 이를 select문으로 활용한다.


- 생성

 

CREATE SEQUENCE 시퀀스이름
INCREMENT BY n
START WITH n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


 INCREMENT BY

 증가분 값

 START WITH

 시작값

 MINVALUE

 최소값

 MAXVALUE

 최대값

 CYCLE

 MAXVALUE 이후 처음부터 다시 시작한다는 의미

 CACHE

 빠른 처리를 위한 메모리 관리, 적어도 2이상 값을 적용해야함



EX)


CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 99999
CYCLE
CACHE 100;

위 쿼리는 1부터 99999까지 1씩 증가하는 sequence를 seq_No라는 이름으로 생성시키는 쿼리이다.


- 삭제

 

DROP SEQUENCE 시퀀스명;


- 수정

 

항목은 생성과 동일하지만 시작 값인 START WITH 는 사용 할 수 없다.


ALTER SEQUENCE 시퀀스이름
INCREMENT BY n
MINVALUE n (or NOMINVALUE)
MAXVALUE n (or NOMAXVALUE)
CYCLE (or NOCYCLE)
CACHE N (or NOCACHE);


- 조회

sequence의 값을 조회하거나 얻을 경우에는 select문을 사용하는데 sequence의 속성을 사용한다.


CURRVAL : 현재 sequence 값을 조회
NEXTVAL : 증가 sequence 값을 조회 & 실제로 증가


select문을 사용 할때는 다음처럼 사용한다.


SELECT 시퀀스이름.CURRVAL FROM DUAL;
SELECT 시퀀스이름.NEXTVAL FROM DUAL;


- SEQEUNCE 목록

SELECT  * FROM USER_SEQUENCES;



이해력을 돕기위한 활용 예제 두둥~!



SQL> CREATE SEQUENCE seq_no
INCREMENT BY 1
START WITH 5
MINVALUE 1
MAXVALUE 10
CYCLE
CACHE 5;

Statement Processed.


-> 시퀀스를 생성한다.


SQL> SELECT seq_no.CURRVAL FROM DUAL
ORA-08002: 시퀀스 SEQ_NO.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다

-> 시퀀스 생성이후 처음에는 CURRVA 값을 얻을 수 없다.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          5

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          6

1 rows selected.

SQL> SELECT seq_no.CURRVAL FROM DUAL;

CURRVAL   
-----------
          6

1 rows selected.



....중간 생략



SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
         10

1 rows selected.


SQL> SELECT seq_no.NEXTVAL FROM DUAL;

NEXTVAL   
-----------
          1

1 rows selected.


-> CYCLE로 설정되어 있기 때문에 MAXVALUE 값인 10 이후에 MINVALUE 1부터 다시 시작한다

[출처] [SQL] sequence|작성자 bluekisunny

'DATABASE' 카테고리의 다른 글

[Oracle] ROW_NUMBER()OVER( )  (0) 2008.03.11
[Oracle ] Sequence  (0) 2008.03.11
Oracle Export , Import 관한 내용  (0) 2008.01.10