Oracle ORA:12054使用UNION ALL创建物化视图

Oracle ORA:12054使用UNION ALL创建物化视图,oracle,exception,materialized-views,union-all,Oracle,Exception,Materialized Views,Union All,当我做这个动作时,我似乎得到了ORA:12054。我真的很感谢你的帮助。 多谢各位 create table daniel (id number, name varchar2(40)); alter table daniel add constraint daniel_pk primary key(id); create materialized view log on daniel with rowid; create materialized view mv_test refresh fa

当我做这个动作时,我似乎得到了ORA:12054。我真的很感谢你的帮助。 多谢各位

create table daniel (id number, name varchar2(40));
alter table daniel add constraint daniel_pk primary key(id);
create materialized view log on daniel with rowid;

create materialized view mv_test
refresh fast on commit as
select id, name, rowid rid
from daniel
UNION ALL
select id, name, rowid rid
from daniel;
创造物化了的奥拉


谢谢

甲骨文抛出ORA-12054异常是因为该联盟。它不喜欢复制品。删除ALL关键字,您就有了一个有效的MView,但也有一个讨厌的MView:您还可以完全删除第二个查询,因为您不会有重复的MView

当然,MView查询的虚假本质可能只是简化了测试用例的方式的产物。如果是这样的话,如果你提出一个更现实的方案,这将有助于我们了解你的情况

请注意,尽管删除ALL会为您提供一个有效的MView,但您仍然无法创建它。MView日志只指定ROWID,这意味着您无法使用刷新快速选项创建MView。要么选择完全刷新,要么需要在日志规范中包含主键:

SQL> create materialized view mv_test
refresh fast on commit as
select id, name, rowid rid
from daniel  2    3    4  
  5  /
from daniel
     *
ERROR at line 4:
ORA-23415: materialized view log for "APC"."DANIEL" does not record the primary key


SQL> drop materialized view log on daniel ;

Materialized view dropped.

SQL> create materialized view log on daniel with rowid, primary key;

Materialized view log created.

SQL> create materialized view mv_test
refresh fast on commit as
select id, name, rowid rid
from daniel  2    3    4  
  5  /

Materialized view created.

SQL> 

欢迎来到SO。例如,如果您进行搜索,会有大量的答案-我怀疑此SQL被认为“太复杂”,无法进行快速刷新,可能是因为视图中没有唯一的键。。?