Oracle 11g-使用JOIN快速刷新物化视图

时间:2019-09-30 09:56:50

标签: oracle11g inner-join materialized-views

编辑:我解决了将JOIN更改为非ANSI格式的问题...但是我仍然希望知道如何使FAST REFRESH与基于包含JOIN的查询建立的物化视图一起工作。

在Oracle 11g上,我似乎无法快速刷新实例化视图。为了执行一些测试,我创建了以下两个表:

CREATE TABLE test_1
(n   NUMBER NOT NULL,
 v   VARCHAR2 (1),
 d   DATE DEFAULT SYSDATE NOT NULL);

CREATE UNIQUE INDEX t_1_pk ON test_1 (n);

ALTER TABLE test_1 ADD (
  CONSTRAINT t_1_pk
  PRIMARY KEY (n)
  USING INDEX t_1_pk
  ENABLE VALIDATE);

CREATE MATERIALIZED VIEW LOG ON test_1 WITH ROWID, PRIMARY KEY;

CREATE TABLE test_2
(n    NUMBER NOT NULL,
 n1   NUMBER,
 v    VARCHAR2 (1),
 d    DATE DEFAULT SYSDATE NOT NULL);

CREATE UNIQUE INDEX t_2_pk ON test_2 (n);

ALTER TABLE test_2 ADD (
  CONSTRAINT t_2_pk
  PRIMARY KEY (n)
  USING INDEX t_2_pk
  ENABLE VALIDATE,
  CONSTRAINT t_2_fk
  FOREIGN KEY (n1)
  REFERENCING test_1 (n));

CREATE MATERIALIZED VIEW LOG ON test_2 WITH ROWID, PRIMARY KEY;

每个填充有随机数据。 然后,我尝试创建一个简单的物化视图:

CREATE MATERIALIZED VIEW test_mv
   BUILD IMMEDIATE
   REFRESH FAST ON DEMAND AS
   SELECT t1.ROWID rid1,
          t2.ROWID rid2,
          t1.n n1,
          t1.v v1,
          t2.n n2,
          t2.v v2
     FROM test_1 t1 JOIN test_2 t2 ON t1.n = t2.n1;

但出现以下错误:

ORA-12015: cannot create a fast refresh materialized view from a complex query

删除JOIN(即仅从一个基本表中选择),我可以构建MView。我尝试搜索一些系统参数进行检查,但这似乎只是静态查询的问题。奇怪的是,我的查询中没有任何无效的表达式(我检查了this questionthis article以及其他许多文档站点和帖子)。另外,我在Oracle 12c上工作了很长时间,并且在创建实例化视图方面从未遇到过困难。

0 个答案:

没有答案