【问题标题】:ORA: 12054 Creating Materialized View with UNION ALLORA: 12054 使用 UNION ALL 创建实体化视图
【发布时间】:2013-07-29 15:22:57
【问题描述】:

当我执行此操作时,我似乎得到 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。

谢谢!

【问题讨论】:

  • 欢迎来到 SO。如果您进行搜索,则会有大量答案,例如 - stackoverflow.com/questions/8883662/…
  • 我怀疑这个 SQL 被认为“太复杂”而无法快速刷新,可能是因为视图中没有唯一键..?

标签: oracle exception materialized-views union-all


【解决方案1】:

Oracle 抛出 ORA-12054 异常是因为那个 UNION ALL。它不喜欢重复。删除 ALL 关键字,你就有了一个有效的 MView,但也是一个令人厌烦的 MView:你不妨完全删除第二个查询,因为无论如何你不会有重复的。

当然,MView 查询的虚假性质可能只是您简化测试用例以在 SO 上发布的方式的产物。如果是这样,如果您提供一个更现实的场景,将有助于我们了解您的情况。

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

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> 

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多