当我尝试执行程序" 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
答案 0 :(得分:12)
但我的PROCEDURE_NAME已处于有效状态且已成功使用 在其他一些程序中。
当前调用包的会话,它保留包的状态。如果重新编译包,那么在该会话中再次调用包时,您将遇到此错误。
在调用完成的PL / SQL调用完成后,您可以执行DBMS_SESSION.RESET_PACKAGE;以释放内存,游标和包变量。
您可以关闭所有现有会话并重新执行。
您可以使用PRAGMA SERIALLY_REUSABLE;
语句制作包SERIALLY_REUSABLE Packages。如果包是SERIALLY_REUSABLE
,则其包状态存储在系统全局区域(SGA)中的小池中的工作区中。包状态仅在服务器调用的生命周期内持续存在。