Dan*_*Dan 15 sql oracle error-handling plsql stored-procedures
所以我一直运行PLSQL程序就好了,编译没有错误.我对我的程序做了一个更改,它仍然编译得很好,但现在当我运行它时,我收到此错误:
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "SCHEMA.XP_COVER_PAGEP" has been invalidated
ORA-04065: not executed, altered or dropped package body "SCHEMA.XP_COVER_PAGEP"
ORA-06508: PL/SQL: could not find program unit being called: "SCHEMA.XP_COVER_PAGEP"
ORA-06512: at "SCHEMA.XP_ST_002180", line 141
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)
任何想法可能是什么?我所做的改变是如此微不足道,我怀疑它可能导致了这个错误.预先感谢您的帮助!
dar*_*jnz 26
当会话使用包时会话保留包的某些状态.如果在下次同一会话引用该包时重新编译该包,则会收到该错误.
为避免这种情况,请确保断开可能已使用该程序包的每个会话,或让会话执行DBMS_SESSION.RESET_PACKAGE以重置程序包状态.
如果重新编译包规范,则所有依赖对象都将失效。依赖对象是引用重新编译的包规范中的任何声明的任何视图、包规范、包主体、函数或过程。
此外,正如 darreljnz 所指出的,会话通常会保留对它们访问过的包状态的引用,从而导致ORA-04068: existing state of packages has been discarded下次会话尝试引用包时。
后一种行为是一个真正的麻烦,并且必须在安装新版本的包(有效地重新启动应用程序/服务)后编写代码来重试操作或关闭所有活动会话。底线:这使得安装修补程序变得更加困难。