" ORA-04068:已丢弃现有的包状态ORA-04065:未执行,更改或删除存储过程

时间:2014-10-30 06:05:19

标签: oracle plsql oracle11g

当我尝试执行程序" PROCEDURE_NAME"根据程序" CALLING_PROCEDURE_NAME"。 但我的PROCEDURE_NAME已处于有效状态并成功使用其他一些程序。

ORA-04068: existing state of packages has been discarded
ORA-04065: not executed, altered or dropped stored procedure ""PROCEDURE_NAME""
ORA-06508: PL/SQL: could not find program unit being called: ""PROCEDURE_NAME""
ORA-06512: at ""CALLING_PROCEDURE_NAME"", line LINE_NO
ORA-06512: at line 1

1 个答案:

答案 0 :(得分:12)

  

但我的PROCEDURE_NAME已处于有效状态且已成功使用   在其他一些程序中。

当前调用包的会话,它保留包的状态。如果重新编译包,那么在该会话中再次调用包时,您将遇到此错误。

  1. 在调用完成的PL / SQL调用完成后,您可以执行DBMS_SESSION.RESET_PACKAGE;以释放内存,游标和包变量。

  2. 您可以关闭所有现有会话并重新执行。

  3. 您可以使用PRAGMA SERIALLY_REUSABLE;语句制作包SERIALLY_REUSABLE Packages。如果包是SERIALLY_REUSABLE,则其包状态存储在系统全局区域(SGA)中的小池中的工作区中。包状态仅在服务器调用的生命周期内持续存在。