存储过程Invalid的问题,需重新编译,探讨中......

我在用PL/SQL Developer的时候,在存储过程中发现有很多存储过程都有红色叉记,看属性知道是这个存储过程的Status为Invalid的缘故,意思大概就是无效的意思吧。如果对该存储过程重新编译的话,则Status又变为Valid,这说明我的存储过程本身是没有错误的,不知道这究竟是什么原因引起存储过程变为无效的???

这种问题发生在我应用的系统中,有时候程序失败,发现是存储过程invalid了,只好重新编译一下,这最恶心了,也不知道是什么引起的?

不知大家碰到过这种问题吗,大家来探讨探讨下.....
---------------------------------------------------------------

alter procedure [procedure_name] rebuild;

生成一个重新编译无效对象的脚本
set head off
spool c:\invalid.sql
select 'alter ' ¦ &brvbarobject_type ¦ ¦' ' ¦ &brvbarowner ¦ ¦'."' ¦ &brvbarobject_name ¦ ¦'" rebuild;' from all_objects where status='INVALID';
spool off

可能由于与存储过程相关的对象发生了变化,导致了存储过程的无效
---------------------------------------------------------------

很多原因:
1、该存储过程需调用的存储过程无效或被删除。
2、该存储过程相关联的表或视图结构被修改过或被drop掉过
3、该存储过程相关联的对象的相应的权限被收回。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus