编辑:我解决了将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 question,this article以及其他许多文档站点和帖子)。另外,我在Oracle 12c上工作了很长时间,并且在创建实例化视图方面从未遇到过困难。