Материализованное представление будет обновляться только тогда, когда запрос выбора возвращает данные в формате oracle - PullRequest
0 голосов
/ 29 мая 2020
Create materialized view mv_testdata
BUILD IMMEDIATE
REFRESH FORCE
AS
SELECT * FROM VW_TESTDATA;

Я хочу, чтобы представление обновлялось еженедельно один раз и только тогда, когда данные доступны в представлении vw_testdata. Пробуем также использовать триггеры, но это не сработало.

Можно ли обновить sh только данные mv, доступные в представлении?

1 Ответ

1 голос
/ 29 мая 2020

Если vw_testdata - «обычное» представление, это сохраненный запрос и не содержит данных. Я предполагаю, что вас беспокоит то, что - если этот запрос (в какой-то момент) не получит "ничего" и вы обновите sh материализованное представление, вы потеряете данные в материализованном представлении.

Если это так, создайте хранимая процедура, например

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; в таком случае обновляется материализованное представление.

Теперь запланируйте выполнение этой процедуры еженедельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...