在Oracle 12的MV中使用Prebuilt Table选项时遇到问题。这段代码运行正常:
CREATE TABLE empt
( ename VARCHAR2(20),
empno INTEGER PRIMARY KEY);
CREATE MATERIALIZED VIEW LOG ON empt
WITH SEQUENCE , rowid (empno)
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW empt_MV
REFRESH FAST ON COMMIT
WITH ROWID
AS
SELECT count(*) numberofemps
FROM empt ;
INSERT INTO empt VALUES ('A',1);
COMMIT;
SELECT * FROM empt_MV;
上一页选择返回,按预期方式:
NUMBEROFEMPS
------------
1
但是,如果我使用ON PREBUILT TABLE选项,则没有任何反应。我的意思是,MV仍然是空的:
drop materialized view empt_mv;
drop materialized view log on empt;
drop table empt;
CREATE TABLE empt
( ename VARCHAR2(20),
empno INTEGER PRIMARY KEY);
CREATE MATERIALIZED VIEW LOG ON empt
WITH SEQUENCE , rowid (empno)
INCLUDING NEW VALUES;
CREATE TABLE empt_MV (
numberofemps NUMBER);
CREATE MATERIALIZED VIEW empt_MV
ON PREBUILT TABLE
REFRESH FAST ON COMMIT
WITH ROWID
AS
SELECT count(*) numberofemps
FROM empt ;
INSERT INTO empt VALUES ('A',1);
COMMIT;
SELECT * FROM empt_MV;
上一个选择返回没有行。
任何人都知道会发生什么?
答案 0 :(得分:0)
如果您在预建表上使用REFRESH FAST
,则无法使用WITH ROWID
。 WITH ROWID Clause
答案 1 :(得分:0)
这取决于Oracle版本。
使用相关文档中提供的说明,该文档将向您展示如何使用DBMS_MView.Explain_MView确定特定情况下的快速刷新功能。
12.1:https://docs.oracle.com/database/121/REPLN/repmview.htm#REPLN304