oracle中select查询returns数据时才刷新物化视图

Materialized view to be refreshed only when the select query returns data in oracle

Create materialized view mv_testdata
BUILD IMMEDIATE
REFRESH FORCE
AS
SELECT * FROM VW_TESTDATA;

我希望视图每周刷新一次,并且仅当 vw_testdata 视图中的数据可用时。也尝试使用触发器,但没有用。

是否可以刷新视图中可用的仅 mv 数据?

如果 vw_testdata 是一个 "ordinary" 视图,它是一个存储查询并且不包含任何数据。我想您担心的是 - 如果该查询(在某个时间)获取 "nothing" 并且您刷新物化视图,您将丢失物化视图中的数据。

如果是这样,创建一个存储过程,例如

create or replace procedure p_refresh as
  l_cnt number;
begin
  select max(1) 
    into l_cnt
    from vw_testdata
    where exists (select null from vw_testdata);

  if l_cnt = 1 then
     dbms_mview.refresh('mv_testdata');
  end if;
end;
/

它检查vw_testadata中是否存在任何东西;如果是这样,它会刷新物化视图。

现在安排该程序每周执行一次。