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

时间:2016-09-21 08:48:27

标签: oracle11g materialized-views

我正在研究Oracle 11g2并遇到以下情况,任何人都可以解释其背后的原因。我找不到相同的文件。

问题: 我无法使用包含ANSI编码标准的以下查询创建 FAST REFRESH物化视图,但如果我使用传统的编码标准,那么我就可以创建它。 如果需要任何进一步的信息,请告诉我。

    **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.**

1 个答案:

答案 0 :(得分:1)

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

也是oracle docs http://docs.oracle.com/cd/B19306_01/server.102/b14223/basicmv.htm

使用仅加入而没有聚合定义具体化视图的查询对快速刷新有以下限制:

  • "快速刷新的一般限制"。General restriction

  • 的所有限制
  • 他们不能拥有GROUP BY子句或聚合。

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

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