查看老项目问题时,发现一个视图单独执行里面的sql是有数据的,但是查询这个视图却没数据,仔细看了一下创建视图的关键字,发现有MATERIALIZED,原来是物化视图啊,故需要手动刷新一下,方法如下:
**
BEGIN
DBMS_MVIEW.REFRESH (
list => 'V_MIPS_ITEM_DETAIL_INFO',
Method =>'COMPLETE',
refresh_after_errors => True);
end;
**
说明:
V_MIPS_ITEM_DETAIL_INFO 为物化视图的名称;
物化视图有三种刷新方式:COMPLETE、FAST和FORCE
Complete:这种刷新方式会删除表中的所有记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
Fast:这种刷新方式采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中。必须创建基于主表的视图日志。
Force:Oracle会自动判断是否满足Fast刷新的条件,如果满足则进行Fast刷新,否则进行Complete刷新。
注意:如果物化视图使用的基础表被删除的话,更新物化视图会报找不到表或视图的错误提示,此时物化视图中的数据不会消失。
创建物化视图的语句(需要基础表中设定主键,否则创建不成功):
CREATE MATERIALIZED VIEW V_MIPS_ITEM_DETAIL_INFO
REFRESH FORCE ON DEMAND
NEXT SYSDATE+1/24/2
AS
SELECT * from tableName