어느 가을날의 전환점

ORACLE|오라클 11g New Feature - Virtual Columns (가상 컬럼) 본문

Database/Oracle

ORACLE|오라클 11g New Feature - Virtual Columns (가상 컬럼)

어느가을빛 2014. 12. 2. 14:08

가상 컬럼은 테이블에있는 하나 이상의 컬럼값을 기반으로 계산식을 적용할 수 있는 11g의 기능이다.


※ 특징 


- 가상 컬럼은 데이터베이스 내의 메타데이터로 저장된다.

- 물리적인 공간을 차지 하지 않는다.

- 파티션 테이블 사용 시 마땅치 않는 컬럼이 없을 경우 가상 컬럼을 통해 적용 

  가능하다.

- 가상 컬럼에 인덱스(함수 기반 인덱스) 생성이 가능하며, 통계 정보 수집도 

  가능하다.

- 다른 테이블의 컬럼을 이용한 가상 컬럼을 생성할 수 없다.

- 가상 컬럼에는 데이터를 INSERT 할 수 없다.


이와 같은 점을 이용하면 기존 트리거를 이용하여 계산 값을 INSERT하는 작업을 제거할 수 있으며, 이로 인한 오버헤드를 줄일 수 있다.


※ 시나리오


CUSTOMER 테이블에 현재 데이터가 50 만건이 입력되어 있는 상황에서 포인트 값을 통해 고객의 등급을 결정해야된다고 가정한다.

POINT 값이 10000 미만이면 "D", 10001 이상 100000 이하이면 "C", 100001 이상 200000 이하이면 "B", 그 외에는 "A" 값이 LEVELS 컬럼에 나오도록 하는 간단한 예제이다.


1. 기존 테이블에 가상 컬럼 추가


alter table customer add

  (levels varchar2(10) generated always as (   

   case when point <= 10000 then 'D'

   when point > 10000 and point <= 100000 then 'C'

   when point > 100000 and point <= 200000 then 'B'

   else 'A' end) virtual);



2. 데이터 확인 및 조회


select name, reg, point, levels from customer

where point in (1, 10001, 100001, 200001);


NAME       REG            POINT LEVELS

---------- --------- ---------- ------

NONVXISHEN 31-OCT-13          1 D

GGZLDXCONZ 31-OCT-13      10001 C

PHCCHCKTSV 31-OCT-13     100001 B

RZIHNWCYXV 31-OCT-13     200001 A



3. 데이터 입력 및 조회


SQL> insert into customer (id, name, reg, point) 

     values (500001, 'JONE', sysdate, 40000);


SQL> select name, reg, point, levels from customer

     where id = 500001;


NAME       REG            POINT LEVELS

---------- --------- ---------- ------

JONE       31-OCT-13      40000 C


LEVELS 컬럼에 데이터를 입력하지 않아도 런타임에 정의된 계산식으로 계산하여 결과 

값을 보여준다.



#출처: http://www.kova.co.kr/techinfo/sub01_read.asp?fre_code=2&fre_num=1&fre_seq=1

Comments