Я хотел материализованное представление с быстрым обновлением (обновление содержащихся в таблицах обновлений). Запрос на материализованное представление выглядит примерно так:
SELECT T1.CODE, T2.NAME
FROM T1
UNION ALL
SELECT T2.CODE, T3.NAME
FROM T2, T3
WHERE T2.ID = T3.ID
Похоже, что в случае использования UNION ALL
я должен добавить ROWID
, чтобы добиться быстрого обновления.
Добавление ROWID
подходит для первой части, но для второй части его нельзя добавить, так как в нем есть соединение.
Кажется, есть 2 варианта преодолеть это:
- Добавление избыточного столбца для
NAME
наT2
и удалениеT3
из запроса. Добавление виртуального столбца, содержащего функцию, которая выбирает имя из
T3
, напримерИМЯ NVARCHAR2 (4000) ВСЕГДА СОЗДАВАЕТСЯ КАК ("СХЕМА". "GET_NAME_FROM_OTHER_TABLE" ("ID"))
По этой ссылке: http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php он говорит:
Материализованные представления, которые обращаются к виртуальному столбцу, должны быть полностью обновлены.
а также
Если он относится к детерминированной пользовательской функции, его нельзя использовать в качестве ключевого столбца разделения.
Могу ли я по-прежнему использовать параметр быстрого обновления для материализованного представления с помощью решения 2?