Мне нужен материализованный просмотр с быстрым обновлением (обновление обновленного содержимого таблиц). Материализованного вида запрос что-то вроде:Быстрое обновление на материализованных представлениях с виртуальными столбцами
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
какNAME NVARCHAR2 (4000), генерируемый ВСЕГДА КАК ("схема". "GET_NAME_FROM_OTHER_TABLE" ("ID"))
по этой ссылке: http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php он говорит:
материализованные представления, которые имеют доступ к виртуальным колонкам должны быть полностью обновлены.
и
Если это относится к детерминированной функции, определенной пользователем, он не может быть использован в качестве столбца ключа разделения.
Могу ли я по-прежнему иметь опцию быстрого обновления на материализованном виде с использованием решения 2?
Функция, которая использует данные из другой таблицы, не может быть детерминированной - тогда нет. – haki
http://stackoverflow.com/questions/7505020/oracle-how-to-create-a-materialized-view-with-fast-refresh-and-joins может помочь. –