본문 바로가기
  • AI (Artificial Intelligence)
Skills/Database

[Oracle] 시퀀스 (SEQUENCE, 자동생성, CURRVAL, NEXTVAL)

by 로샤스 2014. 6. 27.

시퀀스란?

 

- 테이블 내의 유일한 숫자를 자동으로 생성시켜 주는 역할을 합니다.  

- 오라클에서 무결성을 위해 유일한 값을 가져야할 경우, 사용자의 부담을 덜어낼 수 있습니다.

 

그럼 시퀀스의 형식에 대해서 알아볼까요?

 

  1. CREATE SEQUENCE sequence_name
  2.           [START WITH n]
  3.           [INCREMENT BY n]
  4.           [{MAXVALUE n | NOMAXVALUE}]
  5.           [{MINVALUE n | NOMINVALUE}]
  6.           [{CYCLE | NOCYCLE}]
  7.           [{CACHE n | NOCACHE}]
  8.  

START WITH n : 시퀀스 번호의 시작을 지정합니다.

INCREMENT BY n : 연속적인 시퀀스 번호의 증가치를 지정할 때 사용됩니다.

MAXVALUE n : 시퀀스의 최대값을 지정합니다.

MINVALUE n : 시퀀스의 최소값을 지정합니다.

CYCLE  : 시퀀스 값이 최대값까지 증가되고 나면 START WITH에서 지정한 시작 값으로 시퀀스를 다시 시작합니다. 

CACHE n : 메모리상에서 시퀀스 값을 관리하도록 하는 것으로 기본 값은 20입니다.

 

 

자 그럼 시퀀스를 생성하는 예제를 보실까요?

 

  1. CREATE SEQUENCE Seq_Test
  2. INCREMENT BY 1
  3. START WITH 1;

 

시퀀스가 생성된 것이 보이실겁니다. ㅎㅎㅎ

 

이제는 생성된 시퀀스를 사용해 볼까요?

 

우선은 CURRVAL, NEXTVAL을 알아봐야합니다.

 

CURRVAL : 시퀀스의 현재 값을 알아내기 위해서 사용됩니다.

NEXTVAL : 시퀀스의 새로운 값을 할당 합니다. 

 

CURRVAL 과 NEXTVAL을 사용가능한 경우와 사용가능하지 않은 경우를 알아보겠습니다. 

 

●사용 가능한 경우 

 -  서브 쿼리가 아닌 SELECT 문 

 -  INSERT문의 SELECT 절 

 -  INSERT 문의 VALUE 절 

 -  UPDATE 문의 SET 절 

 

●사용이 불가능한 경우 

 -  VIEW의 SELECT절

 -  DISTINCT 키워드가 있는 SELECT문

 -  GROUP BY, HAVING, ORDER BY 절이 있는 SELECT문

 -  SELECT, DELETE, UPDATE의 서브 쿼리

 -  CREATE TABLE, ALTER TABLE 명령의 DEFAULT 값

 

자 그럼 실제로 사용하는 예제를 진행하겠습니다.

 

  1. INSERT INTO Index_Test VALUES(SEQ_TEST.NEXTVAL, '열청', 'SKAWKSLRK',SYSDATE);

INDEX_TEST테이블은 바로 전 포스팅의 테스트용으로 만든 테이블입니다.

 

우선 여기에는 데이터가 하나 들어있어서

 

시퀀스의 START WITH를 2로 바꾸어 진행했습니다.

 

 

결과를 보시면 제대로 시퀀스가 적용된 것을 보실수 있으실겁니다.

 

시퀀스를 삭제 하고 싶으시면,

 

  1. DROP SEQUENCE 시퀀스 이름;

 

위와 같이 해주시면 해당 시퀀스가 삭제 됩니다.

 

 

 

 

 

 

 

 

출처 : http://blog.naver.com/skawkslrk87/70170778269

 

 

 

 

 

 

 

 

 

댓글