Oracle的实体化视图(MVIEW)的深入研究之三

原创 2007年09月14日 09:31:00
Oracle的实体化视图(MVIEW)的深入研究之三     CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
Oracle的实体化视图(MVIEW)的深入研究之三

在Oracle中创建视图时, 如果我们用了"*"符号, 会被自动地根据当时表的定义扩展成字段列表, 在后面再加列时, 新的列不会自动出现在视图的定义中, 直到你重建视图为止. 那么在MVIEW中呢, 通过一个不经意的操作, 发现一个有趣的问题. 总之, 不要随便地在实体视图的定义中使用"*"号.

    下面我们在一个表上建两个实体化视图, 角本如下:

CREATE TABLE T_MVTEST AS SELECT * FROM TAB;
CREATE MATERIALIZED VIEW LOG ON T_MVTEST
    WITH ROWID,SEQUENCE;
CREATE MATERIALIZED VIEW MV_TEST_STAR
    REFRESH FAST WITH ROWID
AS SELECT ROWID RID, A.* FROM T_MVTEST A;
CREATE MATERIALIZED VIEW MV_TEST_NOSTAR
    REFRESH FAST WITH ROWID
AS SELECT ROWID RID, A.TNAME, A.TABTYPE,
   A.CLUSTERID FROM T_MVTEST A;

    接下来对表作一个增加列的操作.

SQL> ALTER TABLE T_MVTEST ADD COL4 VARCHAR2(20);

Table altered.

    接下来来完全刷新两上实体化视图, 看看运行情况:

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE');
BEGIN DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE'); END;

*
ERROR at line 1:
ORA-12018: following error encountered during code generation for
"ANYSQL"."MV_TEST_STAR"
ORA-00904: "COL4": invalid identifier
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: at line 1


SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_NOSTAR', 'COMPLETE');

PL/SQL procedure successfully completed.

    这是因为在进行全部方式的刷新时, 实体化视图的定义根据当前表的定义被展开了, 将会要刷新新增的"COL4"这个列, 而在表"MV_TEST_STAR"中现在没有这个例, 所以刷新失败, 解决的方法呢是在, 这个视图中手工加一个列:

SQL> ALTER TABLE MV_TEST_STAR ADD COL4 NUMBER;

Table altered.

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_STAR', 'COMPLETE');

PL/SQL procedure successfully completed.

    可以这样解决结果还算好了. 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

oracle9i实体化视图.

  • 2014-06-12 14:49
  • 255KB
  • 下载

oracle row特性的使用-利用rownum固定实体化视图

今天主要和大家分享一下近期学习rownum的一个体会。直接看下面的例子吧                    通过上面的例子,我们发现F这个函数调用了1000000次,这样严重的影响了性能。为了减少...

oracle9i实体化视图.pdf

  • 2009-06-05 14:31
  • 255KB
  • 下载

Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)

一、技术实现细节 除非特别说明,下面的SQL命令都是在数据库ora_db2的SYSETM用户下运行的。 假设要复制(或同步)另一服务器上数据库ora_db1中用户db1的所有表。 1. 创...

Oracle普通视图和实体化视图比较

OraclOracle普通视图和实体化视图比较   相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理空间。实体化视图的结果会保存在一个普通的数据表中,...

ORA-12048:刷新实体化视图

当系统中存在多个物化视图,使用刷新组会大大简化物化视图的刷新,只需要将同一时间同步的物化视图全都放到一个刷新组中既可。 在9i中,使用刷新组方便的时候有一个缺点,如果其中一个物化视图报错...

深入研究Hibernate之三:一对多的双向

Classr
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)