Moz*_*Moz 3 oracle plsql view materialized-views
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
Run Code Online (Sandbox Code Playgroud)
无法理解这里出了什么问题,我知道如果我取出 DISTINCT 子句它就可以工作,但是如果我指定必需的“REFRESH COMPLETE ON COMMIT”,为什么我不能使用“DISTINCT”。
如果我按需使用 DISTINCT 和 REFRESH 没有问题,但这些不是要求。
似乎通过添加 DISTINCT,您已经使视图的底层 SQL 不符合快速刷新的条件,因此无法与 ON COMMIT 一起使用(即使您指定刷新完成而不是刷新快速)。来自Oracle 文档:
两种刷新执行模式是 ON COMMIT 和 ON DEMAND。根据您创建的物化视图,某些选项可能不可用。刷新模式说明如表8-4所示。
表 8-4 刷新模式
承诺时
当修改物化视图的详细信息表之一的事务提交时,刷新会自动发生。只要物化视图可以快速刷新(换句话说,不复杂),就可以指定这一点。使用此模式需要 ON COMMIT 权限。
一经请求
当用户手动执行 DBMS_MVIEW 包中包含的可用刷新过程之一(REFRESH、REFRESH_ALL_MVIEWS、REFRESH_DEPENDENT)时,就会发生刷新。
同一文档链接也有快速刷新的限制列表。
| 归档时间: |
|
| 查看次数: |
18541 次 |
| 最近记录: |