오라클에서 자동으로 숫자를 생성해주는 기능이 있습니다. 이는 보통 숫자의 중복 충돌을 피하기위해 1씩 증가하는 기능을 넣는게 일반적입니다.

정리해서 반드시 기입해야하거나(not null), 중복값이 없어야 하는 경우(unique) 자동으로 번호를 생성해주는 sequence 기능을 사용하는게 편리합니다.

 

1. sequence 생성방법

CREATE SEQUENCE 시퀀스명
    [INCREMENT BY 숫자]
    [START WITH 숫자]
    [MAXVALUE 숫자]
    [MINVALUE 숫자]
    [CYCLE, NOCYCLE]
   ;

위부터 순서대로,

increment by : 증가할때는 양수, 감소할때는 음수, 기본값은 1입니다.

start with : 시작할 숫자를 설정합니다.

maxvalue : 최대값 지정

minvalue : 최소값 지정

cycle : 순환지정(어느 값에 도달하면 지정한 최소값부터 다시 시작합니다)

 

대괄호 친 부분은 생략가능하며 시퀀스명 만으로도 생성이 가능합니다.

 

시퀀스를 생성하고 예제를 통해 사용방법에 대해 설명해보겠습니다.

 

CREATE SEQUENCE TEST_SEQ
;

 

간단하게 시퀀스를 작성하였습니다.

 

INSERT INTO WORD(TEST1) VALUES(TEST_SEQ.NEXTVAL);

 

WORD 라는 테이블의 TEST1이라는 컬럼에서(NUMBER타입) 시퀀스를 이용하여 값을 넣어보았고,

다섯 번 ! 실행하여 총 다섯개의 데이터를 확인할 수 있습니다.

 

 

또한, SELECT절에서도 사용가능합니다.

 

SELECT TEST_SEQ.NEXTVAL 
  FROM DUAL
;

 

출력결과↓

 

 

여기서 주의해야 할 것은, INSERT로 5까지의 시퀀스를 출력하고나서 SELECT로 6까지를 출력했습니다.

다음에 TEST_SEQ의 다음 값은 7이됩니다.

만약 그다음 INSERT문을 사용한다면, WORD라는 테이블에서 데이터는 1,2,3,4,5,7이 됩니다.

 

연속된 숫자로 데이터를 나열하고싶다면 여러가지 문제들이 있지만 보통 해결하는 방법중에 시퀀스를 수정하는 방법이 있습니다.

 

ALTER SEQUENCE TEST_SEQ
INCREMENT BY -1
;

 

ALTER를 이용하여 시퀀스를 수정하고, 그 밑에 INCREMENT BY -1을 넣어 증가값을 음수로 수정합니다.

그 다음 원하는 값까지 실행시킵니다.

 

SELECT TEST_SEQ.NEXTVAL 
  FROM DUAL
;

 

전에 사용했던 SELECT와 동일합니다. 하지만 시퀀스가 이전에는 +1이였다면, 이번에는 -1입니다.

원하는 값까지 실행시키고나서 다시 수정합니다.

 

ALTER SEQUENCE TEST_SEQ
INCREMENT BY +1
;

 

명시적으로 +1을 했을 뿐 양수이기 때문에 양수부호를 넣지 않아도 양수처리 됩니다.

 

그리고나서 테이블의 데이터를 순서대로 처리하면 문제는 해결됩니다.

'코딩 > Oracle' 카테고리의 다른 글

스키마란?  (0) 2020.08.27
SQL transaction  (0) 2020.07.13
Oracle 비밀번호 찾기/변경  (0) 2020.07.07
Oracle NVL, NVL2  (0) 2020.07.07
Oracle Foreign key 외래키  (0) 2020.07.05
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기