-- 普通视图
DROP view vw_emp;
create or replace view vw_emp as
select "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
from emp t where t.empno in (7654,7698,7782,7844);
-- 物化视图
DROP materialized view VIEW_CALL;
CREATE MATERIALIZED VIEW VIEW_CALL
REFRESH FAST -- 如果可以快速刷新则进行快速刷新,否则完全刷新。fast(即增量刷新)必须创建基于主表的视图日志;COMPLETE完全刷新,重新生成整个视图;FORCE如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项。
ON DEMAND -- 按照指定方式刷新 ,手动或是自动。on commit 每提交事务就刷新一次
WITH ROWID-- 使用rowId作为主键,primary key 作为主键亦可。PRIMARY KEY是默认选项。WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键。
START WITH TO_DATE('04-06-2014 20:41:12', 'DD-MM-YYYY HH24:MI:SS') -- 第一次刷新时
NEXT SYSDATE+1/24/60/60 -- 刷新时间间隔
AS
-- 视图数据来源
SELECT "CALL_BOOK_INFO"."INFO_ID" "INFO_ID","CALL_BOOK_INFO"."MOBILE_NO" "MOBILE_NO","CALL_BOOK_INFO"."CALLIN_TIME" "CALLIN_TIME","CALL_BOOK_INFO"."CALLOUT_TIME" "CALLOUT_TIME","CALL_BOOK_INFO"."STATUS" "STATUS" FROM "CALL_BOOK_INFO" "CALL_BOOK_INFO";
-- 手动刷新物理视图
begin
DBMS_MVIEW.REFRESH('VIEW_CALL');
end;
-- 建日志 Materialized view log created.
CREATE MATERIALIZED VIEW LOG ON CALL_BOOK_INFO;-- CALL_BOOK_INFO表
-- Refresh选项说明:
-- a. oracle用刷新方法在物化视图中刷新数据.
-- b. 是基于主键还是基于rowid的物化视图
-- c. 物化视图的刷新时间和间隔刷新时间
-- 物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。
-- 主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。
-- Rowid物化视图只有一个单一的主表,不能包括下面任何一项:
-- Distinct 或者聚合函数.
-- Group by,子查询,连接和SET操作