仮想列

(5.7)
生成カラム

1. ディスクに格納される場合 STOREDオプション


drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) as (concat(col1,' ',col2) ) stored
);

insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;

create index ind1 on tab1(col3);
→計算列にインデックス作成可能

2. ディスクに格納されない場合 VIRTUALオプション (デフォルト)

drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) as (concat(col1,' ',col2) ) virtual
);

insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;

create index ind1 on tab1(col3);
→計算列にインデックス作成可能

(12cR1)
仮想列はディスクには格納されない


drop table tab1 purge;
create table tab1(
col1 varchar2(10)
,col2 varchar2(10)
,col3 as (col1 || ' ' || col2)
);

insert into tab1(col1,col2) values('Test','Taro');
commit;
select * from tab1;

create index ind1 on tab1(col3);
→計算列にインデックス作成可能

 

(12)
生成列はディスクに格納される


drop table tab1 cascade;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) generated always as (col1 || ' ' || col2) stored
);

insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;

create index ind1 on tab1(col3);
→計算列にインデックス作成可能

 

 

(2014)

計算列はPERSISTED とマークされていない限り、ディスクには格納されない

1.ディスクに格納される場合 PERSISTEDオプション

drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 as (col1 + ' ' + col2) persisted
);

insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;

create index ind1 on tab1(col3);
→計算列にインデックス作成可能


2.ディスクに格納されない場合 オプションなし

drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 as (col1 + ' ' + col2)
);

insert into tab1(col1,col2) values('Test','Taro');

create index ind1 on tab1(col3);
→計算列にインデックス作成可能