【发布时间】:2014-02-19 09:19:12
【问题描述】:
我想要一个快速刷新的物化视图(更新包含的表更新)。 物化视图查询类似于:
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 是可以的,但是对于第二部分,它不能添加,因为它有一个连接。
似乎有两种方法可以克服这个问题:
- 在
T2上为NAME添加冗余列,并从查询中删除T3。 -
添加一个虚拟列,其中包含一个从
T3中选择名称的函数NAME NVARCHAR2(4000) 始终生成为 ("SCHEMA"."GET_NAME_FROM_OTHER_TABLE"("ID"))
根据此链接:http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php 它说:
访问虚拟列的实体化视图必须完全刷新。
和
如果它引用了确定性的用户定义函数,则不能用作分区键列。
我能否在使用解决方案 2 的实体化视图上仍有快速刷新选项?
【问题讨论】:
-
使用来自另一个表的数据的函数不能是确定性的 - 然后不是。
标签: sql oracle materialized-views