带主键的物化视图不起作用

materialized view with primary key not work

晚安, 我在创建物化视图类型主键时遇到问题,2 table 有主键。如下: table "cotizacion" 有两个主键, -fecha -neumatico

table“table_hija1”有一个主键:“id”

可能是什么问题,非常感谢您的帮助。谢谢,

观测值:

-必须是按需刷新类型

-table_child1,是一个大table,包含50个小table的数据。无法分割

他们分成 50 个小 tables。

CREATE MATERIALIZED VIEW LOG ON Cotizacion
WITH primary key
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON tabla_hija1
WITH  primary key
INCLUDING NEW VALUES;

create materialized view vm_prueba3
refresh fast on demand 
with primary key
as
select 
c.id id1,
e.id id2,
f.id id3,o.neumatico,
o.idproceso,
o.fecha,
o.precio

from Cotizacion o, tabla_hija1 c, tabla_hija1 e,tabla_hija1 f
where
   ( o.estado=c.vvalor(+) and c.tipo_filtro=1 )
   and
   ( o.segmento=e.vvalor(+) and e.tipo_filtro=2) 

错误:

ORA-12052: 系统无法快速实现视觉效果。VM_PRUEBA3

  1. 00000 -“无法快速刷新实体化视图 %s.%s”

*原因:定义中缺少某些 table 的 ROWID 或

外部联接的内部 table 对

没有 UNIQUE 约束

加入列。

*操作:指定 FORCE 或 COMPLETE 选项。如果出现这个错误

在创建过程中,物化视图定义可能已经

改变了。请参阅有关物化视图的文档。

"ROWIDs of certain tables were missing in the definition"

根据文档,对于具有按需执行快速刷新的联接的 MV:

  • 每个细节都必须存在实体化视图日志 table 除非 table 支持分区更改跟踪 (PCT)。另外,当一个 物化视图日志是必需的,ROWID 列必须存在 在每个物化视图日志中。

  • 所有详细信息 table 的 rowid 必须出现在物化视图查询定义的 SELECT 列表中。

https://docs.oracle.com/en/database/oracle/oracle-database/19/dwhsg/basic-materialized-views.html#GUID-3B903558-0C98-4033-9BCD-4A146220E868

您需要在实例化视图中包含每个源 table 的 rowid:

CREATE MATERIALIZED VIEW LOG ON Cotizacion
WITH rowid
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON tabla_hija1
WITH rowid
INCLUDING NEW VALUES;

create materialized view vm_prueba3
refresh fast on demand 
with rowid
as
select 
c.rowid c_rowid,
e.rowid e_rowid,
f.rowid f_rowid,
o.rowid o_rowid,
c.id id1,
e.id id2,
f.id id3,o.neumatico,
o.idproceso,
o.fecha,
o.precio

from Cotizacion o, tabla_hija1 c, tabla_hija1 e,tabla_hija1 f
where
   ( o.estado=c.vvalor(+) and c.tipo_filtro=1 )
   and
   ( o.segmento=e.vvalor(+) and e.tipo_filtro=2)