Oracle数据库-MV快速刷新,引用视图

问题描述 投票:0回答:1

关于快速刷新创建物化视图,我没有几个问题。问题是我需要在查询count(*)函数中使用,这对于快速刷新是非法的。我在某处阅读了一个“帮助”视图,该视图将执行count()。我想从我的物化视图中引用该视图。进行刷新时,完成工作正常,但是在尝试快速执行时,出现ORA 12004错误。我知道我需要从引用的表中获得物化视图日志,但是视图又如何呢?如何创建它们?在引用视图中使用count()也是非法的吗?如何使该视图的ROWID列?如果使用count()非法使用该表,尽管创建了表,还有其他方法吗?

sql database oracle view materialized
1个回答
0
投票

您当然可以在count实例化视图中具有fast refresh

create table t (
  c1 int primary key,
  c2 int
);

insert into t 
  select level, mod ( level, 3 )  
  from   dual
  connect by level <= 10;

commit;

create materialized view log on t
  with rowid, primary key ( c2 )
  including new values;

create materialized view mv
refresh fast on commit 
as 
  select c2, count (*)
  from   t
  group  by c2;

select * from mv;

C2     COUNT(*)   
    1           4 
    2           3 
    0           3 

insert into t 
  select -level, mod ( level, 3 )  
  from   dual
  connect by level <= 10;

commit;

select * from mv;

C2     COUNT(*)   
    1           8 
    2           6 
    0           6 

如果无法快速刷新混合视图,并且不确定原因,请查看dbms_mview.explain_mview。这给出了可能的刷新的细分,以及是否可能用于MV。

对于不可能的情况,有简短的原因说明:

create table mv_capabilities_table (
  statement_id      varchar(30) ,
  mvowner           varchar(30) ,
  mvname            varchar(30) ,
  capability_name   varchar(30) ,
  possible          character(1) ,
  related_text      varchar(2000) ,
  related_num       number ,
  msgno             integer ,
  msgtxt            varchar(2000) ,
  seq               number
) ;

exec dbms_mview.explain_mview('mv');
select capability_name, possible, msgtxt from MV_CAPABILITIES_TABLE
where  capability_name like 'REFRESH%';

CAPABILITY_NAME                  POSSIBLE    MSGTXT                                                                     
REFRESH_COMPLETE                 Y           <null>                                                                      
REFRESH_FAST                     Y           <null>                                                                      
REFRESH_FAST_AFTER_INSERT        Y           <null>                                                                      
REFRESH_FAST_AFTER_ONETAB_DML    Y           <null>                                                                      
REFRESH_FAST_AFTER_ANY_DML       Y           <null>                                                                      
REFRESH_FAST_PCT                 N           PCT is not possible on any of the detail tables in the materialized view    

如果在物化视图中使用视图,则需要在该视图使用的表上创建MV日志。

© www.soinside.com 2019 - 2024. All rights reserved.