Oracle物化视图之on prebuilt table
admin
2023-05-07 00:00:07
0

    创建物化视图添加on prebuilt table的好处是 ,在创建的物化视图的schema下要有与物化视图同名的表,如果更新物化视图,同名表也会被更新。当删除物化视图,不会删除同名的表,且保留从基表更新过来的数据。如果创建物化视图不用on prebuilt table,则不需要在创建的物化视图的schema下要有与物化视图同名的表。

    在用on prebuilt table创建物化视图时,需要注意的几点:

    1.创建的物化视图的schema下必须要有一个与物化视图同名的表。

    2.与物化视图同名的表结构,必须与创建物化视图select query语句字段名相同,且一一对应。



1.在test1下创建基表:

SQL> conn test1/test1

Connected.

SQL> create table testdb1(col1 varchar2(20),col2 number);


Table created.


SQL> alter table testdb1 add constraint pk_a primary key(col1);


Table altered.


SQL> insert into testdb1 values('1',1);


1 row created.


SQL> insert into testdb1 values('2',2);


1 row created.


SQL> commit;


Commit complete.


2.在test1下创建物化视图日志。

SQL> create materialized view log on testdb1 with primary key;


Materialized view log created.


SQL> select * from tab;


TNAME       TABTYPE CLUSTERID

------------------------------ ------- ----------

MLOG$_TESTDB1       TABLE

RUPD$_TESTDB1       TABLE

TESTDB1       TABLE




3.在SYS用户下授予test2相关的权限:

SQL> conn  / as sysdba

Connected.



SQL> grant select on test1.testdb1 to test2;


Grant succeeded.


SQL> grant select on test1.MLOG$_TESTDB1 to test2;


Grant succeeded.


SQL> grant create materialized view to  test2;


Grant succeeded.



4.在test2下创建物化视图

SQL> conn test2/test2

Connected.



--通过下面错误可以看出on prebuilt table创建物化视图必须要创建一张与物化视图同名的表

SQL> create materialized view testdb2 on prebuilt table as select * from test1.testdb1

        *

ERROR at line 1:

ORA-12059: prebuilt table "TEST2"."TESTDB2" does not exist



SQL> create table testdb2(col1 varchar2(20));


Table created.


--通过下面错误可以看出创建的物化视图query数据项必须要与testdb2相同且一一对应

SQL> create materialized view testdb2 on prebuilt table as select * from test1.testdb1;

create materialized view testdb2 on prebuilt table as select * from test1.testdb1

                                                      *

ERROR at line 1:

ORA-12060: shape of prebuilt table does not match definition query



SQL> create materialized view testdb2 on prebuilt table as select col2 from test1.testdb1;

create materialized view testdb2 on prebuilt table as select col2 from test1.testdb1

                                                             *

ERROR at line 1:

ORA-12060: shape of prebuilt table does not match definition query



SQL> create materialized view testdb2 on prebuilt table as select col1 from test1.testdb1;


Materialized view created.


SQL> select count(*) from testdb2;


  COUNT(*)

----------

0



testdb2表已经做物化视图了:

SQL> delete from testdb2;

delete from testdb2

            *

ERROR at line 1:

ORA-01732: data manipulation operation not legal on this view





5.更新物化视图

SQL> exec dbms_mview.refresh('testdb2','c');


PL/SQL procedure successfully completed.


SQL> select count(*) from testdb2;


  COUNT(*)

----------

2





SQL> conn test1/test1

Connected.

SQL>  insert into testdb1 values('3','3');


1 row created.


SQL> commit;


Commit complete.



SQL> conn test2/test2

Connected.


SQL> exec dbms_mview.refresh('testdb2','c');


PL/SQL procedure successfully completed.


SQL> select count(*) from testdb2;


  COUNT(*)

----------

3


6.在test2下删除物化视图:

SQL> drop materialized view testdb2;


Materialized view dropped.


--可见同名的表还存在。

SQL> select count(*) from testdb2;


  COUNT(*)

----------

3


相关内容

热门资讯

江苏睿恩新能源申请正极极片及其... 国家知识产权局信息显示,江苏睿恩新能源科技有限公司申请一项名为“一种正极极片及其制备方法、锂离子电池...
流言|2026年地球会失重7秒... 流言:2026年8月12日地球将失重7秒、数千万人因此伤亡。 (图片由AI生成) 真相:“地球重...
从渠道赋能到行业基础设施 互联... 2025年,伴随数智技术的加速渗透,保险业的获客方式、决策逻辑乃至服务形态,都在被重新定义,互联网保...
人形机器人绕不开的坎:续航问题... 这两年,关于人形机器人的故事已经被讲了很多:AGI 的终极载体、万亿美元的劳动力替代、工厂和家庭的全...
合成生命重要突破 中国团队首次... 中新网北京5月13日电 (记者 孙自法)构建能够模拟天然细胞分裂行为的人工细胞,是合成生命研究至关重...
“九章四号”问世 中国科学家再... 4月10日拍摄的“九章四号”量子计算原型机局部。新华社记者 周牧 摄 新华社合肥5月13日电(记者陈...
索尼正面回应30%平台税:要养... 快科技5月13日消息,针对长期诟病的PlayStation商店30%抽成,索尼官方近日首度正面回应称...
具身跃迁 生态共建 中国移动首... 5月13日,中国移动首届具身智能合作伙伴大会在杭州举行。大会以“数智具身 移路领航”为主题,以搭建政...
“爱泼斯坦被软禁时,性侵了我” 据英国广播公司BBC报道,一名曾遭受杰弗里·爱泼斯坦性侵的幸存者讲述了这位已故性侵犯者,在因引诱未成...
凤凰女记者战地日记丨一边装行李... 今天早上起来一睁眼,就看看伊朗的局势。美伊昨晚在波斯湾又发生了零星冲突,凌晨12点伊朗说靠近格什姆岛...