【问题标题】:error creating materialized view in oracle - ORA-12052在 oracle 中创建物化视图时出错 - ORA-12052
【发布时间】:2021-05-19 22:24:26
【问题描述】:

晚安,我正在尝试在 oracle 中创建物化视图,但出现以下错误消息。我知道有几个限制,但我无法确定错误是什么。请感谢您的帮助。

观察: - 更新方法必须是增量的。

所有表都没有主键,我无法创建它们,因为我没有访问权限。

在 ordenes 上创建 MATERIALIZED VIEW LOG

使用 ROWID

包括新的价值观;

在 tabla_hija 上创建实体化视图日志

使用 ROWID

包括新的价值观;

创建物化视图 vm_prueba2

按需快速刷新

带有rowid

作为

选择 ordenid,o.empleadoid,o.clienteid,fechaorden,descuento,nvl(c.desccripcion,'')as ddesc,e.desccripcion

来自 ordenes o,tabla_hija c,tabla_hija e

在哪里

( o.clienteid=c.valor(+) and c.id_tabla=1 or c.valor is null ) and

( o.empleadoid=e.valor(+) and e.id_tabla=2 or e.valor is null )order by ordenid asc;

通知错误 - ORA-12052: 12052. 00000 - “无法快速刷新实体化视图 %s.%s” *原因:定义中缺少某些表的 ROWID 或 外连接的内表没有 UNIQUE 约束 加入列。 *操作:指定 FORCE 或 COMPLETE 选项。如果出现此错误 在创建过程中,物化视图定义可能是 改变了。请参阅有关物化视图的文档。

【问题讨论】:

    标签: oracle oracle11g oracle-sqldeveloper


    【解决方案1】:

    “定义中缺少某些表的 ROWID”

    您需要在物化视图中包含每个源表的 rowid:

    create materialized view vm_prueba2
    refresh fast on demand
    with rowid
    as
    select 
       o.rowid o_rowid,
       c.rowid c_rowid,
       e.rowid e_rowid,
       ordenid,
       o.empleadoid,
       o.clienteid,
       fechaorden,
       descuento,
       nvl(c.desccripcion,'') as ddesc,
       e.desccripcion
    from ordenes o, tabla_hija c, tabla_hija e
    where
       ( o.clienteid=c.valor(+) and c.id_tabla=1 or c.valor is null ) and
       ( o.empleadoid=e.valor(+) and e.id_tabla=2 or e.valor is null );
    

    我还建议不要对您的 MV 内容进行排序,因为它会给生成增加不必要的开销。存储在磁盘上的行的顺序无关紧要,它会在 Temp 表空间中执行排序时产生大量额外的磁盘 I/O。

    无论如何,Oracle 很可能会为了刷新而放弃排序,因为 Oracle 会自动创建自己的 SQL,并且仅将您的 SQL 用于初始 MV 创建。保存您的排序以供客户/用户查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2016-11-22
      相关资源
      最近更新 更多