Подтвердить что ты не робот

Как обновить материализованный вид в оракуле

Я пытаюсь обновить материализованное представление, используя:

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')

Но он бросает неверный оператор sql.

Затем я создал хранимую процедуру следующим образом:

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS
BEGIN
   DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;

Эта процедура была успешно создана, но когда я вызываю эту процедуру с помощью

MAT_VIEW_FOO_TBL;

он снова выдает ошибку.

Просьба предложить решение этой проблемы.

Спасибо, Шринивас

4b9b3361

Ответ 1

попробуйте следующее:

DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f'); 

первый параметр - это имя mat_view и второй определяет тип refresh. f обозначает быстрое обновление. но помните, что он будет переопределять любые другие параметры синхронизации обновления.

Ответ 2

Запустите этот script, чтобы обновить данные в материализованном виде:

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;

Ответ 3

немного поздно к игре, но я нашел способ сделать оригинальный синтаксис в этом вопросе работы (я на Oracle 11g)

** сначала переключитесь на схему вашего MV **

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');

альтернативно вы можете добавить несколько опций:

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);

это действительно работает для меня, и добавление опции parallelism ускорило мое выполнение примерно в 2,5 раза.

Подробнее здесь: Как обновить материализованный вид в параллельном режиме

Ответ 4

Вы можете полностью обновить материализованное представление следующим образом:

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');

Ответ 5

Если вы работаете с SQL Developer, вам нужно поставить dbms_view в нижнем регистре. Остальное скомпилировано для меня, хотя я еще не вызвал процедуру из кода.

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN
  dbms_mview.refresh('v_materialized_foo_tbl');
END;

Ответ 6

Попробуйте использовать синтаксис ниже:

Общий синтаксис:

begin
dbms_mview.refresh('mview_name');
end;

Пример:

begin
dbms_mview.refresh('inv_trans');
end;

Надеюсь, что это поможет.

Ответ 7

Лучший вариант - использовать '?' аргумент для метода. Таким образом, DBMS_MVIEW выберет лучший способ обновления, поэтому он сделает самое быстрое обновление, которое может вам помочь., и не провалится, если вы попробуете что-то вроде метода = > 'f', когда вам действительно нужно полное обновление.: -)

из приглашения SQL * Plus:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');

Ответ 8

Когда мы должны использовать встроенные процедуры или пакеты, мы должны использовать команду "EXECUTE", тогда она будет работать.

Пример:

EXECUTE exec DBMS_MVIEW.REFRESH('v_materialized_foo_tbl');