【问题标题】:Materialized View creation using ANSI coding standards使用 ANSI 编码标准创建实体化视图
【发布时间】:2017-01-29 10:00:06
【问题描述】:

我正在使用 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.**

【问题讨论】:

    标签: oracle11g materialized-views


    【解决方案1】:

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

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

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

    • “快速刷新的一般限制”中的所有限制。General restriction

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

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

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

    【讨论】:

    • 感谢您的澄清和链接。关于与此相关的 Oracle 错误 ID/编号的任何想法。
    • 检查文档 ID 1087507.1 blogs.oracle.com/db/entry/…
    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多