各位大侠,我新建了一个原始表TABLE_TEST:
create table TABLE_TEST(time varchar2(50),category varchar2(50),cvalue varchar2(50));
然后插入测试数据:
insert into TABLE_TEST values('2006-1-1','A','500');
insert into TABLE_TEST values('2006-1-1','B','550');
insert into TABLE_TEST values('2006-1-1','C','750');
insert into TABLE_TEST values('2006-1-2','A','500');
insert into TABLE_TEST values('2006-1-2','B','580');
insert into TABLE_TEST values('2006-1-2','C','800');
insert into TABLE_TEST values('2006-1-3','A','560');
insert into TABLE_TEST values('2006-1-3','B','560');
insert into TABLE_TEST values('2006-1-3','C','700');
insert into TABLE_TEST values('2006-1-4','B','880');
insert into TABLE_TEST values('2006-1-4','C','990');
select * from table_test;
TIME    CATEGORY     CVALUE
----------------------------
2006-1-1      A        500
2006-1-1      B        550
2006-1-1      C        750
2006-1-2      A        500
2006-1-2      B        580
2006-1-2      C        800
2006-1-3      A        560
2006-1-3      B        560
2006-1-3      C        700
2006-1-4      B        880
2006-1-4      C        990这时,我建立了一个行列转换的物化视图供用户查询:
create materialized view mv_table_test
build immediate
refresh complete
as
select time, 
max(decode(category, 'A', CVALUE, null)) A,
max(decode(category, 'B', CVALUE, null)) B,
max(decode(category, 'C', CVALUE, null)) C
from table_test
group by time
order by time asc
select * from mv_table_test;
TIME        A        B        C
-----------------------------------
2006-1-1    500      550      750
2006-1-2    500      580      800
2006-1-3    560      560      700
2006-1-4             880      990
此时,用户需要将2006-1-4号C的值由990改为1000,由于物化视图是直读的,所以我只能更改原始表,然后刷新物化视图。但由于物化视图是完全刷新,且TABLE_TEST表有上百万条记录,每次当用户更改某一个值后如果都要刷新一遍物化视图的话,用户会觉得等待时间太长了,我想请问一下有没有什么好的方法可以解决这个效率问题?或是有执行效率更高的行列转换SQL也行,先谢谢大家了。