본문 바로가기
Work/DataBase

[ORACLE] Sequence 조회/생성

정의된 시퀀스 모두 조회

select * from user_sequences


현재 시퀀스 조회

select 시퀀스네임.currval from dual


다음 시퀀스 조회


select 시퀀스네임.nextval from dual

 

 

 


시퀀스 생성
CREATE SEQUENCE sequence_name
       [INCREMENT BY n1]
       [START WITH n2]
       [MAXVALUE n3 or NOMAXVALUE]
       [MINVALUE n4 or NOMINVALUE]
       [CYCLE or NOCYCLE]
       [CACHE or NOCACHE];


sequence_name ....... 생성하고자 하는 시퀀스 명
INCREMENT BY n1 ... 해당 시퀀스의 증가값을 지정한다. 생략하면 1로 지정됨.

 

                                오름차순 : 양의 정수, 내림차순 : 음의정수 사용
START WITH n2 ........ 해당 시쿼스가 처음 시작하는 값을 지정한다. 생략하면 1로 지정됨.
MAXVALUE n3 ......... 해당 시퀀스가 생성할 수 있는 최대값,
NOMAXVALUE ......... 오름차순 최대 10의 27승 까지, 내림차순 -1 까지 생성됨.
MINVALUE n4 .......... 해당 시퀀스가 생성할 수 있는 최소값
NOMINVALUE .......... 오름차순 1 까지, 내림차순 -10의 26승 까지
CYCLE ................... 해당 시퀀스가 최대값에 도달한 후 다시 처음부터 시퀀스를 생성한다.
NOCYCLE ............... 해당 시퀀스가 최대값에 도달해도 다시 생성하지 않는다.[DEFAULT]
CACHE ................... 시퀀스 값을 메모리에 할당하여 처리한다. [ORACLE DEFAULT 20]
NOCACHE ............... 시퀀스를 메모리에 할당하여 사용하지 않음.
 

 

예1)

CREATE SEQUENCE test_seq
           INCREMENT BY 2
           START WITH   1
           MAXVALUE 100
           NOCYCLE
           NOCACHE;

 

test_seq 시퀀스를 생성한다.
초기값은 1부터 시작하며 2씩 증가하고 100이 되거나 100에 가장 근접한 값을 가지게 되면
종료된다.(NOCYCLE 지정에 의해)
NOCHCHE지정으로 메모리에 CACHE하지는 않는다.

결과) 1 3 5 7 9 ..... 99

 

 

시퀀스 수정

ALTER SEQUENCE [시퀀스명]
         INCREMENT BY  [증가값]
         MAXVALUE [최대값 / NOMAXVALUE]
         MINVALUE [최소값 / NOMINVALUE]
         CACHE [캐쉬 / NOCACHE] 
         CYCLE [반복여부 / NOCYCLE]


- 해당 옵션에 값을 넣어 수정
- 시작값은 수정 불가

시퀀스 삭제

DROP SEQUENCE 시퀀스 명;

 

테이블과 똑같이 DROP 명령어로 시퀀스를 삭제할 수 있습니다.

단, DROP 할 수 있는 권한이 있어야 삭제할 수 있습니다.

 

 

 

 

+

 

 

시퀀스에 특징중 하나는, 응용프로그램에서 시퀀스를 사용할때,

한번받아온 CURRVAL를 계속해서 접근해서 받아오지 않습니다.

접속했던 마지막 세션에 대한 값을 받아옵니다.

 

다시말해, 응용프로그램에서 1번 시퀀스를 가져갔는데,

오라클 디비에서 nextval를 통해 시퀀스를 여러차례 증가시켜도

응용프로그램안에서는 currval는 1에 멈춰있습니다. (껏다켜도.. nextval를 하기전까지는 올바른 값을 읽어오지않아요ㅠ)

응용프로그램안에서 nextval를 해주어야, 디비에서 새롭게 증가된 올바른 값을 동기화해옵니다.

 

시퀀스를 쓸때, 참고하시기 바랍니다