天天看點

【物化視圖】速重新整理物化視圖都必須滿足的條件

所有類型的快速重新整理物化視圖都必須滿足的條件:

1.物化視圖不能包含對不重複表達式的引用,如SYSDATE和ROWNUM;

2.物化視圖不能包含對LONG和LONG RAW資料類型的引用。但是從測試環境上看支援對raw類型的引用。

1.不能包括GROUP BY語句或聚集操作;

yang@rac1>create materialized view mv_yang_err refresh fast on commit with rowid

  2  as select id ,count(1)  from yang_a group by id;

as select id ,count(1)  from yang_a group by id

                             *

第 2 行出現錯誤:

ORA-32401: "YANG"."YANG_A" 上的實體化視圖日志沒有新值

yang@rac1>create materialized view mv_yang_pk refresh fast on commit

  2  as select id ,count(1) from yang_pk group by id;

as select id ,count(1) from yang_pk group by id

                            *

ERROR at line 2:

ORA-32401: materialized view log on "YANG"."YANG_PK" does not have new values

2.如果在WHERE語句中包含外連接配接,那麼唯一限制必須存在于連接配接中内表的連接配接列上:

yang@rac1>drop materialized view mv_fact_err;

Materialized view dropped.

yang@rac1>alter table fact drop constraint fact_fk_aid;

Table altered.

yang@rac1>alter table yang_a drop primary key ;

yang@rac1>create materialized view mv_fact_err refresh fast on commit as

  2    select f.rowid frid,a.rowid arid,b.rowid brid,f.id,

  3    a.name aname,b.name bname ,val

  4    from fact f ,yang_a a,yang_b b

  5    where f.aid=a.id(+)

  6    and f.bid=b.id;

Materialized view created.

物化視圖可以被建立,看來條件不成立。

3.如果不包含外連接配接,那麼WHERE語句沒有限制,如果包含外連接配接,那麼WHERE語句中隻能使用AND連接配接,并且隻能使用“=”操作:

  6    and f.bid != b.id;

此條件不成立。

4.FROM語句清單中所有表的ROWID必須出現在SELECT語句的清單中:

  2    select b.rowid brid,f.id,

  from fact f ,yang_a a,yang_b b

       *

ERROR at line 4:

ORA-12052: cannot fast refresh materialized view YANG.MV_FACT_ERR

5.FROM語句清單中的所有表必須建立基于ROWID類型的物化視圖日志。

繼續閱讀