DataBase

[Oracle] 시퀀스 생성 - 자동증가

과일가게 개발자 2014. 9. 9. 04:00
반응형

웹개발을 하다보면 테이블 생성시 단순 숫자로된 필드를 PK로 잡고 사용할때가 있다.

이때 DBMS에서 제공하는 자동증가 함수를 사용하면 개발이 편하다.


물론 숫자 형식이라도 어떠한 특정 규칙을 가져야 할 경우 소스 상에서 규칙대로 숫자를 생성후에 테이블에 insert 하면 되지만,
특별한 규칙이 필요없는 일반적인 상황에서라면 자동으로 1씩 증가되는 자동증가 함수를 사용하면 된다.

MySQL의 경우 autoincrement, MS-SQL의 경우 identity 옵션을 해당 컬럼에 설정하면 자동으로 1씩 증가한다.
그러나 오라클의 경우 그러한 해당 옵션이 존재하지 않는다. 대신 시퀀스라는것을 생성하여 사용하면 된다.


MySQL이나 MS-SQL보다 불편하긴 하지만, 그래도 자동 증가를 사용할 수 있으니 그나마 다행이다.


오라클에서 시퀀스를 생성하는 방법은 다음과 같다



[시퀀스 생성]

 CREATE SEQUENCE 시퀀스이름;
 예) CREATE SEQUENCE TB_BOARD_SEQ ;



[시퀀스 생성시 옵션 사용]

CREATE SEQUENCE 시퀀스이름
  [INCREMENT BY number]
  [START WITH number]
  [MAXVALUE number or NOMAXVALUE]
  [MINVALUE number or NOMINVALUE]
  [CYCLE or NOCYCLE]
  [CACHE or NOCACHE] ;

 예)CREATE SEQUENCE TB_BOARD_SEQ
     INCREMENT BY 2
     START WITH 10001
     NOMAXVALUES ;



INCREMENT : 시퀀스의 자동 증가값. 제외시 1씩 증가
START : 시퀀스의 시작 값. 제외시 1부터 시작
MAXVALUE : 시퀀스 최대값, NOMAXVALUES : 최대값 제한 없음
MINVALUE : 시퀀스 최소값, NOMINVALUE : 최소값 제한 없음
CYCLE : 최대값이 지나면 다시 시작, NOCYCLE : 최대값이 지나면 다시 시작 안함
CACHE : 시퀀스값을 메모리에 할당, NOCACHE : 메모리에 할당하지 않음   


[시퀀스 호출]

 INSERT INTO 테이블명(seq, name) VALUES(시퀀스이름.NEXTVAL, '홍길동') ;
 예) INSERT INTO TB_BOARD(seq, name) VALUES(TB_BOARD_SEQ.NEXTVAL, '홍길동');


자동 증가된 시퀀스 값을 가져오고 싶을땐 NEXTVAL 사용

NEXTVAL : 현재 시퀀스에서 증가된 값
CURRVAL : 현재 시퀀스의 값


[시퀀스 삭제]

 DROP SEQUENCE 시퀀스이름 ;
 예) DROP SEQUENCE TB_BOARD_SEQ ;




TIP) 시퀀스는 NUMBER형이다. 그렇기 때문에 자동증가값을 담을 컬럼은 숫자형태의 컬럼이어야 한다.