oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题

一.问题描述

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

二.问题再现

1.Oracle10g环境

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第1张图片

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第2张图片

1.2  创建测试视图VW_TABLEUSERALL和VW_TABLEUSER

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第3张图片

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第4张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第5张图片

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

97692afe026620cd4a78a6a5af62e23b.png

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第6张图片

1.4 重新编译两张视图

58982ad25250777ee96e65170129d0db.png

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第7张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第8张图片

1.5 视图重建

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第9张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第10张图片

2. Oracle11g环境

2.1 环境准备

和Orale10g下的1.1 和1.2 步骤一致

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

3be839e4a340c3a9808572c368653c52.png

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第11张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第12张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第13张图片

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

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第14张图片

2.5 重建视图,问题解决

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第15张图片

oracle 重建表对应视图失效,Oracle表结构修改触发视图无法正常使用问题_第16张图片

3. 问题结论

Oracle10g环境下:

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

Oracle11g环境下:

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

因此:

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

原文:http://www.cnblogs.com/tianqing/p/3749729.html

你可能感兴趣的:(oracle,重建表对应视图失效)