Как обновить материализованный вид в 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 ответов
запустите этот скрипт для обновления данных в материализованном виде:
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');