仅当选择查询返回oracle中的数据时才刷新结构化视图

问题描述 投票:0回答:1
Create materialized view mv_testdata
BUILD IMMEDIATE
REFRESH FORCE
AS
SELECT * FROM VW_TESTDATA;

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

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

oracle oracle11g materialized-views
1个回答
0
投票

如果vw_testdata是“普通”视图,则它是存储的查询,不包含任何数据。我认为您担心的是-如果该查询(有时)未获取任何信息,而您刷新了实例化视图,则将丢失实例化视图中的数据。

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

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中是否存在任何内容;如果是这样,它将刷新实例化视图。

现在计划每周执行一次该程序。

© www.soinside.com 2019 - 2024. All rights reserved.