【发布时间】:2011-01-30 22:58:10
【问题描述】:
我有一个使用包 (PKG_MY_PACKAGE) 的脚本。我将更改该包中查询中的一些字段,然后重新编译它(我不更改或编译任何其他包)。我运行脚本,我得到一个看起来像
的错误 ORA-04068: 包的现有状态已被丢弃 ORA-04061: 包主体 "USER3.PKG_MY_PACKAGE" 的现有状态已失效 ORA-04065: 未执行、更改或删除包主体 "USER3.PKG_MY_PACKAGE" ORA-06508: PL/SQL: 找不到被调用的程序单元: "USER3.PKG_MY_PACKAGE" ORA-06512: 在第 34 行我再次运行脚本(不更改系统中的任何其他内容)并且脚本成功执行。
我认为当我在执行脚本之前编译时会修复任何无效引用。这是 100% 可重现的,我使用这个脚本的次数越多,它就越烦人。什么可能导致这种情况,什么可以解决它?
(oracle 10g,使用 PL/SQL Developer 7)
【问题讨论】:
-
@OMG:我只是重新编译正文,因为这就是所有的变化。
-
没有理由为此使用全局变量 - 只需切换到 sys_context。这样您就可以完全删除全局变量并使您的包无状态。