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

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

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;

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

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

спасибо, Шринивас!--4-->

8 ответов


попробуйте это:

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

первый


запустите этот скрипт для обновления данных в материализованном виде:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

попробуйте использовать следующий синтаксис:

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

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

пример:

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

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


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

EX:

выполнить execute DBMS_MVIEW.Обновить('v_materialized_foo_tbl');