Oracle表结构修改触发视图无法正常使用问题

  • 一.问题描述

    当对视图使用的基表进行表结构修改后,会触发视图的无效以及编译出错问题,必须重建视图解决。

    二.问题再现

    1.Oracle10g环境

    1.1 创建视图测试用两张基表:TestTable和TestUser

    \

    \

    1.2  创建测试视图VW_TABLEUSERALL和VW_TABLEUSER

    前者使用了TestTable.*, 后者显示指定列。

    \

    \

     查询视图的状态如下:全部是Valid状态

       \

    1.3 修改TestTable表结构:增加一列Col1

    \

     再次查询视图的状态如下:全部是INVALID状态

      \

     

    1.4 重新编译两张视图

      \

     重新查询视图的状态如下:全部是Valid状态:

      \

       查询视图的数据:VW_TableUserAll查询出错。

      \

    1.5 视图重建

      \

      重新查询视图的数据:VW_TableUserAll查询正常: 新增的Col1出现了!

        \

       2. Oracle11g环境

       2.1 环境准备

       和Orale10g下的1.1 和1.2 步骤一致

       2.2 修改TestTable表结构:增加一列Col1

        \

        查询视图的状态如下:全部是VALID状态

        \

        2.3 查询视图VW_TableUserAll,没有新增的Col1这一列!

        \

       但是基表TestTable中存在Col1这一列

       \

      2.4 重新编译视图,依旧查不到Col1这一列

      \

      2.5 重建视图,问题解决

      \

      

    3. 问题结论

    Oracle10g环境下:

    对视图基表的修改会触发view的无效。如果视图中使用了修改的基表表结构,重新编译视图无法解决问题,视图需要重建。

    Oracle11g环境下:

    对视图基表的修改不会触发view的无效。如果视图中使用了修改的基表表结构,重新编译视图无法解决问题,视图需要重建。

    因此:

    如果修改了视图使用到的基表的表结构被修改了,恰如视图中涉及了修改后的表结构,重新编译视图操作,仍无法查询到修改的列,必须进行视图重建。

  转自:http://www.cnblogs.com/tianqing/p/3749729.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值