プロシージャ「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
しかし、私のPROCEDURE_NAMEはすでに有効な状態にあり、他のいくつかの手順で正常に使用されています。
パッケージが現在呼び出されているセッションは、パッケージのその状態を保持します。パッケージを再コンパイルすると、パッケージがそのセッションで再度呼び出された瞬間に、このエラーが発生します。
DBMS_SESSION.RESET_PACKAGE; を実行して、呼び出しを行ったPL/SQL呼び出しの実行が終了した後で、メモリ、カーソル、およびパッケージ変数を解放できます。
既存のセッションをすべて閉じて、再実行できます。
PRAGMA SERIALLY_REUSABLE;
ステートメントを使用して、パッケージ SERIALLY_REUSABLE Packages を作成できます。パッケージがSERIALLY_REUSABLE
の場合、そのパッケージの状態は、システムグローバル領域(SGA)の小さなプール内の作業領域に格納されます。パッケージの状態は、サーバー呼び出しの存続期間中のみ持続します。