重新编译视图
2012-12-08 19:35
204 查看
当表名、列名、列类型等底层表的信息发生改变的时候,就会使得视图无法使用,其时就需要对视图进行重新的编译。
第一步,查找失效的视图。
可以使用数据字典中的user_objects来查找出失效的视图名,还可以利用user_views来查找出相应视图的代码信息。
基本的代码如下:
第二步,重新编译。
可以使用以下方式来重新编译视图:
ALTER VIEW view_name COMPILE;
如果视图的结构被改变了(如底层表的列被删除了),则上面的这种方法无法对视图重新编译成功。为此,现在只能把视图删掉,然后重新建立视图。
第一步,查找失效的视图。
可以使用数据字典中的user_objects来查找出失效的视图名,还可以利用user_views来查找出相应视图的代码信息。
基本的代码如下:
----------------查找出失效的视图 Select object_name, ---------对象名称 object_type, ---------对象类型 status ---------对象当前状态 from user_objects ---------用户对象表 where object_type= ‘VIEW’ and status = ‘INVALID’; ----------------利用上面找出的试图名称,查找出视图的代码 Select VIEW_NAME, --------视图名称 TEXT --------视图的代码 from user_views --------用户视图表 where view_name=’view_name’
第二步,重新编译。
可以使用以下方式来重新编译视图:
ALTER VIEW view_name COMPILE;
如果视图的结构被改变了(如底层表的列被删除了),则上面的这种方法无法对视图重新编译成功。为此,现在只能把视图删掉,然后重新建立视图。
---------建立表和视图 create table table1 ( column1 integer, column2 integer ); create view view1 (column3) as select column1 as column3 from table1; ---------查看修改前的状态 Select object_name,object_type,status from user_objects where object_type = 'VIEW' ; and object_name='VIEW1'; --------修改前的状态为可用 OBJECT_NAME OBJECT_TYPE STATUS ------------ ---------- ------------- VIEW1 VIEW VALID ----------------修改table1中column1 alter table table1 modify column1 not null; ---------------再次查看修改后视图的状态,发现为“不可用” Select object_name,object_type,status from user_objects where object_type = 'VIEW' and object_name='VIEW1'; ---------------修改后的状态 OBJECT_NAME OBJECT_TYPE STATUS ------------- --------- ------------- VIEW1 VIEW INVALID ---------------对视图进行重新编译 ALTER VIEW view1 COMPILE; ---------------再次查看视图的状态,视图“可用” Select object_name,object_type,status from user_objects where object_type = 'VIEW' and object_name='VIEW1'; OBJECT_NAME OBJECT_TYPE STATUS ----------- ---------- ----------- VIEW1 VIEW VALID ---------------如果破坏视图的结构,比如说删除column1,则以上的修复方式无效 alter table table1 drop column column1; alter view view1 compile; --重新编译无效,视图的结构已经改变 --------------删除原来的视图 drop view view1; -------------查找出原来的视图语句,根据修改重新建立新的视图 Select VIEW_NAME,TEXT from user_views where view_name='VIEW1'; create view view1 as select column2 from table1; -------------查看视图的状态 Select object_name,object_type,status from user_objects where object_type = 'VIEW' and object_name='VIEW1' OBJECT_NAME OBJECT_TYPE STATUS ------------ ----------- ------------- VIEW1 VIEW VALID
相关文章推荐
- sql server 重新编译所有视图
- 删除可视图中的类不能彻底避免它重新被编译
- 删除可视图中的类不能彻底避免它重新被编译
- SQL当修改表的时候,必须重新编译与之相关联的视图。
- apktool 重新编译资源
- maven自动编译,解决你每次代码修改需要重新编译的繁琐
- mysql重新编译innodb引擎
- 重新编译PLSQL中的无效对象或者指定的对象 的方法
- wubi 安装Ubuntu (windows下安装),重新编译内核后无法进入系统解决方案(只能进入grub)
- PHP5不重新编译,手动添加扩展
- ubuntu环境下重新编译内核
- 第一章-任务1:Linux内核的重新编译,安装,重启
- php不重新编译安装扩展模块
- oracle编译存储过程提示表或视图不存在的问题分析
- Oracle失效对象自动重新编译
- VIM的重新编译,支持lua(安装 neocomplete时需要)
- xcode修改完js lua等文件不用每次都重新编译的设置方法
- android修改系统源码(重新编译源码)
- Win7下,VS2010 + CUDA7.5 + GPU 重新编译OpenCV2.4.9(二)
- ORACLE重新编译无效对象的执行问题