我正在尝试找到一种方法来使用预先填充数据的表来构建物化视图。
物化视图创建时状态为“未知”。为了支持查询重写,我调用了
dbms_mview.refresh
。但是,我观察到预先填充的数据在重新填充之前被刷新清除了。
有什么方法可以在MV刷新时,不重新填充而保留预建表中的数据?
下面是我试验过的代码:
--simulate data population of the pre-built table
create table t_mv as select col1, col2, col3 from t order by col2;
--create the MV
create materialized view t_mv
on prebuilt table
enable query rewrite
as
select col1, col2, col3 from t
;
--refresh the MV
exec dbms_mview.refresh(list => 'T_MV');
--## After MV refresh completed, data is not clustered by col2 as what it was in the pre-built table.
刷新只是在 mview 定义中运行查询,因此您还需要在其中包含 ORDER BY,例如
SQL> create table t as select * from dba_objects;
Table created.
SQL> create table mv as select * from t order by object_type;
Table created.
SQL> create materialized view mv
2 on prebuilt table
3 enable query rewrite
4 as select * from t order by object_type;
Materialized view created.