DATABASE

[MSSQL, Oracle DB] 시퀀스 사용하기

예나부기 2021. 7. 16.

시퀀스란?

  • 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다.
  • 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다. (오라클 내부 루틴에 의해 생성되거나 증가 또는 감소)
  • 보통 PRIMARY KEY 값을 생성하기 위해 사용한다.
  • 시퀀스는 테이블과는 독립적으로 저장된고 생성된다. (따라서 여러 테이블에 동일한 시퀀스를 사용할 수 있음)
  • 시퀀스 값을 메모리에 캐시하면 액세스 효율이 높아진다.

 

CREATE SEQUENCE 문법

Oracle DB와 비교했을 때 sequence create 구문은 동일하다.

CREATE SEQUENCE [시퀀스이름]

INCREMENT BY 1

START WITH 1

MAXVALUE 100

CYCLE(또는 NOCYCLE)

CACHE(또는 NOCACHE);

-INCREMENT BY n : 시퀀스 번호 사이의 간격을 지정, 생략 시 1씩 증가

-START WITH n : 생성할 첫번째 시퀀스 번호를 지정, 생략 씨 1부터 시작

-MAXVALUE n : 시퀀스가 생성할 수 있는 최대값을 지정

-MINVALUE n : 시퀀스의 최소값을 지정

-CYCLE, NOCYCLE : 최대값 또는 최소값에 도달한 이휴에도 시퀀스가 계속 값을 생성할지 여부를 결정

-CACHE, NOCACHE : Oracle 서버가 미리 할당하여 메모리에 저장할 값의 개수를 지정 (기본적으로 20개)

 

시퀀스 사용 - Oracle DB

INSERT INTO [테이블명] VALUES [시퀀스이름.nextval]

-NEXTVAL은 사용 가능한 다음 시퀀스 값을 반환하며, 참조될 때마다 (서로 다른 사용자일지라도) 고유한 값을 반환

-CURRVAL은 현재 시퀀스 값을 반환

-CURRVAL이 값을 포함하려면 먼저 해당 시퀀스에 대해 NEXTVAL이 실행되어야 함

(NEXTVAL을 참조하면 새 시퀀스 번호가 생성되며 현재 시퀀스 번호는 CURRVAL에 위치하게 된다.)

 

NEXTVAL 및 CURRVAL을 사용 할 수 있는 경우

-서브 쿼리에 속하지 않은 SELECT 문의 SELECT 목록

-INSERT 문에 있는 서브 쿼리의 SELECT 목록

-INSERT 문의 VALUES 절

-UPDATE 문의 SET절

 

NEXTVAL 및 CURRVAL을 사용할 수 없는 경우

-뷰의 SELECT 목록

-DISTINCT 키워드가 있는 SELECT문

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

-SELECT, DELETE, UPDATE 문의 서브쿼리

-CREATE TABLE 또는 ALTER TABLE문의 DEFAULT 표현식

 

시퀀스 사용 - MSSQL

INSERT INTO [테이블명] VALUES NEXT VALUE FOR [시퀀스이름]

-시퀀스는 오라클 객체인데 MSSQL에서 오라클과 동일한 방식으로 제공하기 위해 SQL SERVER 2012부터 제공

-생성된 시퀀스는 데이터베이스 > 프로그래밍 기능 > 시퀀스에 존재

>MSSQL에서는 시퀀스 뿐만 아니라 identity도 사용가능 

 

댓글