데이터베이스/Oracle

가상컬럼

backend dev 2024. 4. 3.

가상 컬럼

하나의 테이블에 존재하는 다른 컬럼들을 이용하여 새로운 값을 만들어 내는 것

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

컬럼명 타입 GENERATED ALWAYS AS 표현식 VIRTUAL

 

create table vtable
(
    no1 number,
    no2 number,
    no3 number GENERATED ALWAYS as (no1+no2) virtual
)

 

insert into vtable(no1, no2)
values (100, 200);

가상열에는 insert를 할 수 없다. ( 오류발생함)

select *
from vtable;

 

 

데이터를 업데이트 해도

update vtable
set no1 = 300
where no1 = 100;

 

잘 변경되어있다.

 

 

가상 컬럼 추가도 가능하다.

 

alter table vtbl_1 
add(no4 generated always as ((no1*12)+no2) virtual);

이런식으로

 

 

예제

입고일을 통해 몇분기인지 계산할수 있지만

분기에 대한 조회가 많은경우에 따로 컬럼을 생성해준다.

그때 분기를 계산해주는 가상컬럼을 생성해줄수있다.

--실무에서 활용되는 코드
-- 제품정보 (입고) : 분기별 데이터 추출(4분기)
create table vtable2(
   no number, --순번
   p_code char(4), --제품코드 (A001 , B003)
   p_date char(8), --입고일 (20230101)
   p_qty number, --수량
   p_bungi number(1) GENERATED ALWAYS as (
                                            case when substr(p_date,5,2) in ('01','02','03') then 1
                                                 when substr(p_date,5,2) in ('04','05','06') then 2
                                                 when substr(p_date,5,2) in ('07','08','09') then 3
                                                 else 4
                                            end
                                         ) VIRTUAL
);

 

insert into vtable2(p_date) values('20220101');
insert into vtable2(p_date) values('20220522');
insert into vtable2(p_date) values('20220601');
insert into vtable2(p_date) values('20221111');
insert into vtable2(p_date) values('20221201');
commit;

select * from vtable2;

 

결과

 

 

댓글