Изменить запрос материализованного представления
Мне нужно изменить запрос Materialized view. Можно ли сделать то же самое, не вызывая и не воссоздавая его.
Ответы
Ответ 1
Нет, вы не можете изменить запрос материализованного представления, не отбрасывая его.
Синтаксис CREATE MATERIALIZED VIEW не поддерживает эту функцию.
ALTER MATERIALIZED VIEW используется для изменения существующего материализованного представления одним или несколькими из следующих способов:
- Чтобы изменить его характеристики хранения
- Чтобы изменить его метод обновления, режим или время
- Чтобы изменить его структуру так, чтобы это был другой тип материализованного представления
- Чтобы включить или отключить перезапись запроса
См. руководство Oracle 12c Release 1 для:
Ответ 2
В тех случаях, когда вы не уверены, существует ли MVIEW или нет (что для CREATE OR REPLACE действительно полезно), я использую
BEGIN
EXECUTE IMMEDIATE 'DROP MATERIALIZED VIEW name_of_mview';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -12003 THEN
dbms_output.put_line('MVIEW does not exist, which was somewhat expected');
ELSE
RAISE;
END IF;
END;
/
CREATE MATERIALIZED VIEW name_of_mview ... AS SELECT ...
Ответ 3
Вы можете оставить mview на месте. Если ваша задача состоит в том, чтобы минимизировать время простоя, в то время как новый mview создает экземпляр (поскольку вы не использовали предварительно созданную таблицу), вы можете сделать следующее.
- Создайте новую таблицу с именем mview_1 в готовой таблице
- Как только он был создан, вы можете отказаться от старого.
- создать или заменить view mview как select * from mview_1
Теперь, когда вам нужно перестроить, вы сможете сделать это с минимальным временем простоя, так как вы можете просто взглянуть на представление новой таблицы /mview в будущем.
Ответ 4
Вы МОЖЕТЕ иметь возможность использовать существующий MV в качестве источника готовой таблицы для нового MV
Многое зависит от того, что вы делаете с запросом, конечно. Например, если вы добавляете столбец, вам нужно обновить все, чтобы получить новое значение.
PS. Быстрый способ превратить существующий MV в таблицу будет заменой разделов, но обратите внимание на gotchas. Затем вы управляете таблицей в соответствии с новым набором результатов и создаете новый MV на основе управляемой таблицы.