使用 ANSI 编码标准创建物化视图

Materialized View creation using ANSI coding standards

我在 Oracle 11g2 上工作,遇到了以下情况谁能解释一下背后的原因。我找不到合适的文档。

问题: 我无法使用以下包含 ANSI 编码标准的查询创建 FAST REFRESH Materialized View,但如果我使用常规编码标准,则可以创建它。 如果需要任何进一步的信息,请告诉我。

    **EMP Table:**
    EMP_ID   NUMBER
    EMP_NAME VARCHAR2(100)
    DEPT_ID  NUMBER

    **DEPT Table:**
    DEPT_ID   NUMBER
    DEPT_NAME VARCHAR2(100)


    --Mat View Logs creation
    CREATE MATERIALIZED VIEW LOG ON EMP WITH ROWID ;
    CREATE MATERIALIZED VIEW LOG ON DEPT WITH ROWID;

     CREATE MATERIALIZED VIEW EMP_DEPT_MV
     REFRESH  FAST
     AS
     SELECT EMP_ID,EMP_NAME,EMP.DEPT_ID,DEPT_NAME,EMP.ROWID E_R,DEPT.ROWID D_R
     FROM   EMP
     INNER
     JOIN   DEPT
     ON     EMP.DEPT_ID=DEPT.DEPT_ID;

**SQL Error: ORA-12015: cannot create a fast refresh materialized view from a complex query
12015. 00000 -  "cannot create a fast refresh materialized view from a complex query"**


 CREATE MATERIALIZED VIEW EMP_DEPT_MV
 REFRESH  FAST
 AS
 SELECT EMP_ID,EMP_NAME,EMP.DEPT_ID,DEPT_NAME,EMP.ROWID E_R,DEPT.ROWID D_R
 FROM   EMP,DEPT
 WHERE  EMP.DEPT_ID=DEPT.DEPT_ID;

 **Materialized view EMP_DEPT_MV created.**

您不能使用 ANSI 连接语法,使用旧的 Oracle 连接语法。这是 Oracle 中的错误。

也来自 oracle 文档 http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm,

定义仅具有 连接且没有聚合的物化视图查询 对快速刷新有以下限制:

  • 来自"General Restrictions on Fast Refresh"的所有限制。General restriction

  • 它们不能有 GROUP BY 子句或聚合。

  • FROM列表中所有表的rowids必须出现在SELECT
    查询列表。

  • 物化视图日志必须与所有基表的 rowid 一起存在 在查询的 FROM 列表中。