Как обновить материализованный вид в оракуле
Я пытаюсь обновить материализованное представление, используя:
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;
он снова выдает ошибку.
Просьба предложить решение этой проблемы.
Спасибо,
Шринивас
Ответы
Ответ 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');