错误信息为:“无法为实体化视图设置on commit刷新属性”,去掉refresh force on commit后,继续错误:“不能从复杂查询中创建一个可快速刷新的实体化视图”,有没有什么变通的办法?straggc是自定义函数。create MATERIALIZED view scydtsgdjs2 refresh force on commit as
select a.STOREID
       ,a.ngrq
       ,a.xbsj
       ,a.dzrxm
       ,a.pbrxm
       ,a.cjrxm
       ,a.jdrxm
       ,a.ygzl
       ,b.wjz
       ,b.wjnf
       ,b.wjh
       ,b.bt
       ,b.mj
       ,b.hj
       ,b.ztc
       ,b.fwdwmc
       ,b.fwsj
       ,b.zsdwlist
       ,b.csdwlist
       ,c.wjm as tab514wjm
       ,straggc(d.Wjm) tab512wjm
       ,straggc(t.wjm) tab513wjm
       ,straggc(e.handlerfullname) handlerfullname
       ,straggc(e.receiver) receiver
from tab501 a,tab511 b,tab514 c,tab512 d,tab513 t,tab3102 e
where a.wj = concat('511.',b.storeid) 
  and a.qb = concat('514.',c.storeid) 
  and d.relateddocstoreid = b.storeid 
  and t.relateddocstoreid = b.storeid 
  and e.TARGETDOCID = concat('501.',a.storeid)
group by a.STOREID
         ,a.ngrq
         ,a.xbsj
         ,a.dzrxm
         ,a.pbrxm
         ,a.cjrxm
         ,a.jdrxm
         ,a.ygzl 
         ,b. wjz
         ,b.wjnf
         ,b.wjh
         ,b.bt
         ,b.mj
         ,b.hj
         ,b.ztc
         ,b.fwdwmc
         ,b.fwsj
         ,b.zsdwlist
         ,b.csdwlist
         ,c.wjm

解决方案 »

  1.   

    用完全刷新试试,
    create MATERIALIZED view scydtsgdjs2 refresh complete as
      

  2.   

    straggc函数有没有加deterministic如果不能加,只能全表更新
      

  3.   

    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

    so,你可以选择下别的方法刷新你的视图。最后的方法可以使用job
      

  4.   

    物化视图各参数的意义如下,请用各种参数都试一下就明白:
    以下是Oracle创建物化视图(Materialized View,以下简称MV)时的常用语法,各参数的含义如下:1.refresh [fast|complete|force] 视图刷新的方式:
    fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on (主表名)。
    complete:全部刷新。相当于重新执行一次创建视图的查询语句。
    force: 这是默认的数据刷新方式。当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式。2.MV数据刷新的时间:
    on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)
    on commit:当主表中有数据提交的时候,立即刷新MV中的数据;
    start ……:从指定的时间开始,每隔一段时间(由next指定)就刷新一次;