ALTER TABLE RECORDINGS ADD PRIMARY KEY (ID);
CREATE MATERIALIZED VIEW LOG ON RECORDINGS TABLESPACE USERS NOLOGGING;
DROP MATERIALIZED VIEW REC_SEARCH_TEST;
CREATE MATERIALIZED VIEW REC_SEARCH_TEST
REFRESH COMPLETE ON COMMIT
AS (
SELECT DISTINCT ID, TITLE FROM RECORDINGS
);
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
无法理解这里出了什么问题,我知道如果我取出 DISTINCT 子句它就可以工作,但是如果我指定必需的“REFRESH COMPLETE ON COMMIT”,为什么我不能使用“DISTINCT”。
如果我按需使用 DISTINCT 和 REFRESH 没有问题,但这些不是要求。
似乎通过添加 DISTINCT,您已经使视图的底层 SQL 不符合快速刷新的条件,因此无法与 ON COMMIT 一起使用(即使您指定刷新完成而不是刷新快速)。从甲骨文文档:
两种刷新执行模式是 ON COMMIT 和 ON DEMAND。取决于
在您创建的物化视图上,某些选项可能不可用
可用的。刷新模式说明如表8-4所示。
表 8-4 刷新模式
承诺时
当事务修改其中之一时,刷新会自动发生
物化视图的详细信息表提交。这个可以指定
只要物化视图可以快速刷新(换句话说,
不复杂)。使用此模式需要 ON COMMIT 权限。
一经请求
当用户手动执行可用的操作之一时,就会发生刷新
DBMS_MVIEW 包中包含的刷新过程(REFRESH、
REFRESH_ALL_MVIEWS、REFRESH_DEPENDENT)。
同一文档链接也有快速刷新的限制列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)