[Oracle] 오라클 INSERT 1씩 증가시키는 방법 (MAX+1, 시퀀스)

오라클에서는 칼럼의 값을 자동으로 증가시키는 기능이 없기 때문에 INSERT 작업 시 직접 일련번호를 매번 후 데이터를 입력해야 한다. 가장 많이 사용하는 방법은 일련번호 칼럼의 마지막 값을 가져와서 +1 하여 사용한다. 그러나 MAX+1의 단점은 테이블의 트랜잭션이 과도하게 발생하면 중복으로 번호가 채번 되어서 입력 시 오류가 발생할 수 있다.

  • MAX + 1 사용하는 방법
  • 시퀀스 사용하는 방법

 

테이블의 INSERT 건수가 많이 없거나 프로그램을 잘 설계하였다면 MAX + 1의 방법으로 채번을 해도 큰 문제가 없지만, INSERT가 많이 발생한다면 중복 채번을 예방하기 위해서 시퀀스를 사용할 것을 권장한다.

 

MAX + 1 사용하는 방법

INSERT INTO emp( empno
               , ename
               , job
               , mgr
               , hiredate
               )
         VALUES( (SELECT NVL(MAX(empno), 0) + 1 FROM emp)
               , 'GENT'
               , 'BLOGGER'
               , 7839
               , TRUNC(SYSDATE)
               )

 

 

INSERT 작업 수행 시 서브 쿼리를 사용하여 자신의 테이블에서 MAX + 1을 채번 후 입력한다.

일련번호 채번 시 데이터가 없으면 NULL이 반환되기 때문에 NVL을 사용하여 0으로 치환 후 +1을 한다.

 

INSERT INTO emp( empno
               , ename
               , job
               , mgr
               , hiredate
               )
         VALUES( NVL((SELECT /*+ INDEX_DESC(a EMP_PK) */
                             a.empno
                        FROM emp a
                       WHERE ROWNUM = 1), 0) + 1
               , 'GENT'
               , 'BLOGGER'
               , 7839
               , TRUNC(SYSDATE)
               )

 

 

일련번호 칼럼에 인덱스가 생성되어 있다면 인덱스 힌트(INDEX_DESC)를 사용하여 마지막으로 입력된 일련번호 1건을 조회하여 +1을 하여 입력한다.

 

MAX + 1보다 조금 더 성능이 좋은 방법이다. (MAX + 1 중복 채번 가능성을 조금 더 최소화)

 

 

시퀀스 사용하는 방법

CREATE SEQUENCE emp_seq
       INCREMENT BY 1
       START WITH 8000 --시작값 1로 설정
       MINVALUE 1
       MAXVALUE 99999
       NOCYCLE
       NOCACHE
       NOORDER;

 

시퀀스를 생성하는 쿼리이다. 시작 값(START WITH)은 1부터 시작하면 된다. (테스트 때문에 8000부터 시작)

 

INSERT INTO emp( empno
               , ename
               , job
               , mgr
               , hiredate
               )
         VALUES( emp_seq.NEXTVAL
               , 'GENT'
               , 'BLOGGER'
               , 7839
               , TRUNC(SYSDATE)
               )

 

 

시퀀스를 사용하면 중복 채번이 발생하지 않는다. 시퀀스의 단점은 한번 채번 된 값을 삭제할 경우 이전 일련번호를 사용하기 쉽지 않다는 점이다. 만약 일련번호가 모두 순차적으로 존재해야 한다면 관리하기 쉽지 않다.

 

 

[Oracle] 오라클 시퀀스(Sequence) 생성 및 사용법 (자동증가, 일련번호)

오라클에서는 자동 증가 컬럼을 사용할 수가 없다. 다른 DB에서는 컬럼 자체에 옵션이 있으나, 오라클에서는 컬럼의 값을 증가시키기 위해서는 MAX(컬럼) + 1 또는 시퀀스를 사용하여 일련번호를

gent.tistory.com

 

[Oracle] 오라클 INSERT 방법 & 노하우 정리 (데이터 입력)

오라클에서 테이블에 데이터를 입력할 때는 INSERT 문을 사용하면 된다. INSERT 문은 SQL의 아주 기본이지만 상황에 따라서 다양한 방법으로 사용할 수 있으니, 아래를 예제를 참고하면 앞으로 INSERT

gent.tistory.com

 

댓글

Designed by JB FACTORY