본문 바로가기
개발 공부/DataBase

[Oracle] 자동으로 인덱스 값 증가 시키기 (auto_increment 기능)

by sngynhy 2021. 10. 5.

MySQL의 auto_increment와 같은 기능을 처리하는 두가지 방법

1. NVL 함수 이용

NVL 함수는 해당 컬럼의 값이 NULL인 경우 특정값으로 치환한다.

NVL('값',  '지정값')
NVL(컬럼, 0) -- 해당 컬럼의 값이 NULL인 경우 0으로 치환

 

예제 테이블)

CREATE TABLE TMP(
	IDX_NUM NUMBER(10),
	NAME VARCHAR2(20)
);

 

insert) IDX_NUM 컬럼의 최대값에 +1 한 값을 IDX_NUM 값으로 삽입

만약 IDX_NUM 컬럼의 최대값이 NULL인 경우 0으로 치환하여 +1 해준다.

INSERT INTO TMP (IDX_NUM, NAME) VALUES (NVL((SELECT MAX(IDX_NUM) FROM TMP),0)+1, 'NAME');

 

조회 결과) IDX_NUM 값이 1만큼 증가하는 것 확인

 

 

 

2. 시퀀스 사용

예제 테이블)

CREATE TABLE TMP(
	IDX_NUM NUMBER(10),
	NAME VARCHAR2(20)
);

 

시퀀스 생성) TMP_SEQ 시퀀스는 1부터 시작하여 1씩 증가하며 100까지 도는 시퀀스

CREATE SEQUENCE TMP_SEQ START WITH 1 INCREMENT BY 1 MAXVALUE 100 CYCLE NOCACHE;

 

CREATE SEQUENCE “스키마명.시퀀스명”

속성 의미
MINVALUE  시퀀스가 시작되는 최초의 숫자
MAXVALUE  시퀀스가 끝나는 최대 숫자
INCREMENT BY 시퀀스가 증가되는 단위
START WITH 시퀀스 생성이 시작되는 값
NOCACHE  캐시를 사용하지 않음
NOORDER 요청되는 순서대로 값을 생성하지 않음
NOCYCLE  초기값부터 다시 시작하지 않음

 

insert)

INSERT INTO TMP VALUES (TMP_SEQ.NEXTVAL, 'NAME');

 

조회 결과) IDX_NUM 값이 1만큼 증가하는 것 확인

 

시퀀스 삭제) 테이블 삭제와 동일

DROP SEQUENCE TMP_SEQ;