0

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

谢谢!

4

1 回答 1

1

由于那个 UNION ALL,Oracle 抛出 ORA-12054 异常。它不喜欢重复。删除 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> 
于 2013-07-29T07:22:57.417 回答