首页 > 解决方案 > 如何使用 where day>to_date(20200531) 快速创建物化视图刷新

问题描述

完整代码:

create materialized view log on TABLEAU.GW_STATISTICS 
WITH ROWID,
SEQUENCE(AD_ID,day)including new values;

create materialized view log on TABLEAU.GW_CLIENTS
WITH ROWID,
SEQUENCE(id,NAME)including new values;

CREATE MATERIALIZED VIEW MV_CREATIVE_DCO_ADWORDS_2
NOLOGGING
NOCOMPRESS 
CACHE 
NOPARALLEL 
REFRESH FAST ON DEMAND 
as
   select TABLEAU.GW_STATISTICS.ROWID, 
          ACC.ROWID, 
          ACC.NAME,
          TABLEAU.GW_STATISTICS.AD_ID,
          min(TABLEAU.GW_STATISTICS.DAY),
          TABLEAU.GW_STATISTICS.DAY
     FROM TABLEAU.GW_STATISTICS, 
          TABLEAU.GW_CLIENTS ACC
    WHERE TABLEAU.GW_STATISTICS.CLIENTID=ACC.ID(+) and  TABLEAU.GW_STATISTICS.DAY>TO_DATE('20200531','yyyymmdd')
 group by TABLEAU.GW_STATISTICS.ROWID, 
          ACC.ROWID, 
          ACC.NAME,
          TABLEAU.GW_STATISTICS.AD_ID,
          TABLEAU.GW_STATISTICS.DAY;

工作创建物化视图

WHERE TABLEAU.GW_STATISTICS.CLIENTID=ACC.ID(+)

不工作创建物化视图

WHERE TABLEAU.GW_STATISTICS.CLIENTID=ACC.ID(+) 
    AND TABLEAU.GW_STATISTICS.DAY>TO_DATE('20200531','yyyymmdd')

   
  1. 00000 - “无法快速刷新实体化视图 %s.%s” *原因:定义中缺少某些表的 ROWID,或者外部连接的内部表对连接列没有 UNIQUE 约束。*操作:指定 FORCE 或 COMPLETE 选项。如果在创建过程中出现此错误,则物化视图定义可能已更改。请参阅有关物化视图的文档。

为什么我不能按日期添加过滤器?如何绕过这个限制?

标签: oracleoracle12c

解决方案


原因:定义中缺少某些表的 ROWID...

对于初学者,您需要ROWID在您的选择中包含来自每个表的:

CREATE MATERIALIZED VIEW MV_CREATIVE_DCO_ADWORDS 
NOLOGGING
NOCOMPRESS 
CACHE 
NOPARALLEL 
REFRESH FAST ON DEMAND 
as
   select TABLEAU.GW_STATISTICS.ROWID, 
          ACC.ROWID, 
          ACC.NAME,
          TABLEAU.GW_STATISTICS.AD_ID,
          min(TABLEAU.GW_STATISTICS.DAY),
          TABLEAU.GW_STATISTICS.DAY
     FROM TABLEAU.GW_STATISTICS, 
          TABLEAU.GW_CLIENTS ACC
    WHERE TABLEAU.GW_STATISTICS.CLIENTID=ACC.ID(+)
      AND TABLEAU.GW_STATISTICS.DAY>TO_DATE('20200531','yyyymmdd')
 group by TABLEAU.GW_STATISTICS.ROWID, 
          ACC.ROWID, 
          ACC.NAME,
          TABLEAU.GW_STATISTICS.AD_ID,
          TABLEAU.GW_STATISTICS.DAY;

或者外部联接的内部表对联接列没有 UNIQUE 约束。

此外,TABLEAU.GW_STATISTICS.CLIENTID需要有一个唯一的约束。


推荐阅读