ORA-04068:
existing state of packages string
has been discarded
Cause: One of errors 4060 - 4067 when
attempt to execute a stored procedure.
Action: Try again after proper
re-initialization of any application's
state.
Oracle
MOSC offers several causes of
ORA-04068 including:
ORA-04068 can be
caused by a variety of initiating
events.
If a remote dependent object has
been altered through a DDL statement
then invoking the procedure/package can
result ORA-04068: existing state of
packages has been discarded .
The most common cause of the
ORA-04068 is when a dependent object in
a package is altered by a DDL statement.
When packages are compiled, copies of
the package residing in the shared pool
are marked as invalid. Invoking
the package indicates that the flag is
set and it looks to get a new copy.
ORA-04068 results because the package
cannot compile due to the difference
between the dependent objects in the
package and the shared pool.
Similarly, using DDL when recompiling
or changing a package with package level
variables can cause the ORA-04068 error
to be thrown. The changes cascade,
and the package is flagged as invalid.
As a result, the ORA-04068 occurs.
ORA-04068 can result when there is a
failed execution call for a package that
relies on another package that has no
body. The compiled package that is
called searches for a specification in
the package with no body. Finding
none, the ORA-04068 is thrown.
It is also possible to see an
ORA-04068 returned when remote dependent
object is altered with a DDL statement.
Invoking the procedure can then cause
the ORA-04068.
SQL expert Laurent Schneider
has noted that
pragma SERIALLY_REUSABLE
can be used in some situations to avoid
the ORA-04068. Pragma
SERIALLY_REUSABLE is an indication that
the package state is needed only for one
call to the server, but having a
particular package state for that one
call can help avoid ORA-04068.