所以我很确定Oracle支持这个,所以我不知道我做错了什么 . 此代码有效:
CREATE MATERIALIZED VIEW MV_Test
NOLOGGING
CACHE
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT V.* FROM TPM_PROJECTVERSION V;
如果我添加一个JOIN,它会中断:
CREATE MATERIALIZED VIEW MV_Test
NOLOGGING
CACHE
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT V.*, P.* FROM TPM_PROJECTVERSION V
INNER JOIN TPM_PROJECT P ON P.PROJECTID = V.PROJECTID
现在我收到错误:
ORA-12054:无法为实例化视图设置ON COMMIT刷新属性
我在TPM_PROJECT和TPM_PROJECTVERSION上创建了物化视图日志 . TPM_PROJECT的主键为PROJECTID,TPM_PROJECTVERSION的复合主键为(PROJECTID,VERSIONID) . 有什么诀窍呢?我一直在挖掘Oracle手册无济于事 . 谢谢!
4 回答
FAST REFRESH的关键检查包括以下内容:
No 3很容易错过,值得在这里强调
你有没有ANSI加入尝试过吗?
如果您没有为查询引用的主表创建物化视图日志,则会在REFRESH_FAST上收到错误 . 如果有人不熟悉物化视图或第一次使用它,更好的方法是使用oracle sqldeveloper并以图形方式放入选项,并且错误也提供了更好的意义 .
首先,从Oracle Database Data Warehousing Guide开始:
这意味着您的语句需要看起来像这样:
另一个需要注意的关键方面是您的物化视图日志必须创建为
with rowid
.以下是功能测试场景: