Изменить материализованный вид запроса - PullRequest
22 голосов
/ 25 ноября 2010

Мне нужно изменить материализованный вид запроса. Можно сделать то же самое, не сбрасывая и не воссоздавая его.

Ответы [ 5 ]

20 голосов
/ 27 июня 2013

Нет, вы не можете изменить запрос материализованного представления, не отбрасывая его.

Синтаксис CREATE MATERIALIZED VIEW не поддерживает эту функцию.

ALTER MATERIALIZED VIEW используется для изменения существующего материализованного представления одним или несколькими из следующих способов:

  • Чтобы изменить его характеристики хранения
  • Чтобы изменить метод обновления, режим или время
  • Чтобы изменить его структуру так, чтобы это был другой тип материализованного представления
  • Чтобы включить или отключить перезапись запроса

См. Руководство по Oracle 12c Release 1 для:

5 голосов
/ 03 июня 2013

Для условий, в которых вы не уверены, существует ли 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 голосов
/ 25 ноября 2010

Вы можете оставить mview на месте. Если вы хотите минимизировать время простоя при создании экземпляра нового mview (потому что вы не использовали предварительно созданную таблицу), вы можете сделать следующее.

  1. Создать новую таблицу с именем mview_1 в готовой таблице
  2. Как только он будет создан, вы можете отбросить старый
  3. создать или заменить представление mview как select * from mview_1

Теперь, когда вам нужно перестроить, вы сможете сделать это практически без простоев, так как вы можете просто указать на представление новой таблицы / mview в будущем.

2 голосов
/ 02 июля 2018

Это может быть новая функция в более поздней версии Oracle, но я обнаружил, что это прекрасно работает:

DROP MATERIALIZED VIEW my_mview PRESERVE TABLE;

CREATE MATERIALIZED VIEW my_mview
ON PREBUILT TABLE ...
0 голосов
/ 25 ноября 2010

Вы МОЖЕТ иметь возможность использовать существующий MV как источник готовой таблицы для нового MV

Многое зависит от того, кем вы являетесьделаю по запросу конечно.Например, если вы добавляете столбец, вам нужно обновить все, чтобы получить его новое значение.

PS.Быстрый способ превратить существующий MV в таблицу - это обмен разделами, но следите за gotchas .Затем вы манипулируете таблицей в соответствии с новым набором результатов и создаете новый MV на основе этой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...