SQL> select * from mv_test; --可以看见物化视图数据并没有变化
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 wang gongzuo
60 zhuzhzu zhuzhuz
已选择6行。
创建ON COMMIT物化视图
SQL> insert into mv_test(deptno,dname,loc) values (70,'test','test'); --物化视图不能像普通视图表那样插入数据
insert into mv_test(deptno,dname,loc) values (70,'test','test')
*
第 1 行出现错误:
ORA-01732: 此视图的数据操纵操作非法
SQL> create materialized view mv_test1 refresh force on commit as select * from dept1;
create materialized view mv_test1 refresh force on commit as select * from dept1
*
第 1 行出现错误:
ORA-12054: 无法为实体化视图设置 ON COMMIT 刷新属性 --此错误是由于没有创建物化视图日志
SQL> create materialized view log on dept1 ;
create materialized view log on dept1
*
第 1 行出现错误:
ORA-12014: 表 'DEPT1' 不包含主键约束条件
SQL> alter table dept1 add constraints pk_deptno primary key (deptno);
SQL> create materialized view log on dept1 ;
实体化视图日志已创建。
SQL> create materialized view mv_test1 refresh force on commit as select * from
dept1;
实体化视图已创建。
SQL> select mv.REFRESH_MODE from user_mviews mv where mv.MVIEW_NAME = 'MV_TEST1' --查看刷新模式
;
REFRES
------
COMMIT
测试ON COMMIT物化视图的更新特性
SQL> set timing on;
SQL> insert into dept1(deptno,dname,loc) values (80,'test','test');
已创建 1 行。
已用时间: 00: 00: 00.04
SQL> commit;
提交完成。
已用时间: 00: 00: 00.09
SQL> select * from mv_test1; --可以看到数据已经更新过来了,但是对COMMIT速度会有一些影响,越大的表影响越大。
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 wang gongzuo
60 zhuzhzu zhuzhuz
70 test test
80 test test
已选择8行。
已用时间: 00: 00: 00.00
更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12