目前我使用REFRESH ON DEMAND创建的Materialized视图,所以在这种情况下我需要使用以下命令显式刷新MV:
BEGIN DBMS_MVIEW.REFRESH('MV_DATA'); END;
但是现在我需要每天刷新这个MV,所以有人可以帮忙写这个。我已经看到我们可以使用在MV本身中编写显式Job或使用COMPLETE / FAST REFRESH语句来刷新此MV。
提前致谢!
您需要使用START WITH和NEXT子句创建物化视图
create materialized view <mview_name>
refresh on demand
start with sysdate next sysdate + 1
as select ............
因此,如果您想每天刷新mview,您需要按需刷新它,并将下一个刷新时间设置为sysdate + 1
。您可以设置任何间隔。
执行此操作后,将创建物化视图,并在Oracle中设置作业,每24小时(sysdate + 1)
将刷新mview。
有关如何执行此操作的详细信息,请访问this link
如果你只需要一个SQL查询来简单地在12 AM
刷新,那么下面的查询就足够了。
CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDIATE
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>
如果你需要在6 AM
周围刷新它,那么使用下面的脚本。您可以看到+ 6 / 24
和其他逻辑。如果您需要更改为4 AM
,请使用逻辑+ 4 / 24
。
CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE
REFRESH FAST START WITH (SYSDATE) NEXT (SYSDATE + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM <YOUR TABLE>
我编辑了Sarath的脚本,以便在特定时间(即早上6点)运行。
CREATE MATERIALIZED VIEW MV_DATA
BUILD IMMEDEATE
REFRESH FAST START WITH (SYSDATE) NEXT (TRUNC(SYSDATE) + 1) + 6 / 24 WITH ROWID
ON COMMIT
DISABLE QUERY REWRITE
AS SELECT * FROM YOURTABLE