2014-10-30 2 views
7

im folgenden Fehler immer dann gespeichert, wenn im Verfahren auszuführen versuchen“ PROCEDURE_NAME „unter Prozedur“ CALLING_PROCEDURE_NAME“ Aber mein PROCEDURE_NAME. ist bereits in gültigem Zustand und erfolgreich in einigen anderen Verfahren.„ORA-04068: bestehende Zustand der Pakete wurde verworfen ORA-04065: nicht ausgeführt, verändert oder Aussetzern Verfahren

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

müssen Sie Ihre proc/Paket – Thomas

+0

@Thomas neu kompilieren: Nein, in diesem Fall ist es, da die Sitzung einige Paketstatus hatte, die fallen gelassen wurde, als das Paket neu kompiliert wurde. –

Antwort

10

Aber mein PROCEDURE_NAME ist bereits in gültigem Zustand und erfolgreich in einigen anderen Verfahren verwendet werden.

Die Sitzung, in der das Paket gerade aufgerufen wird, behält diesen Status des Pakets bei. Wenn Sie das Paket erneut kompilieren, wird der Fehler in dem Moment auftreten, in dem das Paket erneut in dieser Sitzung aufgerufen wird.

  1. Sie können DBMS_SESSION.RESET_PACKAGE; führen Sie den Speicher, Cursor zu befreien und Paketvariablen nach dem PL/SQL-Aufruf, der Aufruf gemacht Ausführung beendet.

  2. Sie können alle vorhandenen Sitzungen schließen und erneut ausführen.

  3. Sie könnten das Paket SERIALLY_REUSABLE Packages mit PRAGMA SERIALLY_REUSABLE; Anweisung machen. Wenn ein Paket SERIALLY_REUSABLE ist, wird sein Paketstatus in einem Arbeitsbereich in einem kleinen Pool im System Global Area (SGA) gespeichert. Der Paketzustand bleibt nur für die Lebensdauer eines Serveraufrufs bestehen.

+1

Hüten Sie sich vor den Auswirkungen dieser verschiedenen Optionen auf die Leistung; Wenn Ihr Paket viel aufgerufen wird, ist Option 3 möglicherweise eine schlechte Idee. –

Verwandte Themen