Ich vermute, dass Sie nur den letzten Fehler in einem Stapel wie diese Berichterstattung:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"
Wenn ja, das ist, weil your package is stateful:
Die Werte der Variablen, Konstanten und Cursor dass ein Paket deklariert (in seiner Spezifikation oder seinem Körper) sein Paket Staat. Wenn ein PL/SQL-Paket mindestens eine Variable, Konstante, oder den Cursor deklariert, ist das Paket stateful; ansonsten ist es statesless.
Wenn Sie neu kompilieren der Staat verloren:
Wenn der Körper eines instanziiert, Stateful Paket neu kompiliert wird (entweder explizit mit dem „PAKET Statement ALTER“ oder implizit), der Der nächste Aufruf eines Unterprogramms im Paket bewirkt, dass die Oracle-Datenbank den vorhandenen Paketstatus verwirft und die Ausnahme ORA-04068 auslöst.
Nach PL/SQL die Ausnahme auslöst, ein Verweis auf das Paket verursacht Oracle Database, das Paket neu zu instanziieren, die neu initialisiert es ...
Sie können dies nicht vermeiden, wenn Ihr Paket hat Status. Ich denke, es ist ziemlich selten, dass ein Paket wirklich statusbehaftet sein muss. Sie sollten also alles, was Sie im Paket deklariert haben, nochmals überprüfen, aber außerhalb einer Funktion oder Prozedur, um zu sehen, ob es auf dieser Ebene wirklich benötigt wird. Da Sie auf 10g sind, enthält das jedoch Konstanten, nicht nur Variablen und Cursor.
Aber der letzte Absatz aus der zitierten Dokumentation bedeutet, dass Sie das nächste Mal, wenn Sie das Paket in der gleichen Sitzung referenzieren, den Fehler nicht erhalten und es wie normal funktioniert (bis Sie erneut kompilieren).
Sind Sie auch immer etwas, wie 'existierender Paketstatus wurde verworfen '? Wenn es so ein zweites Mal in der gleichen Sitzung läuft, sollte es funktionieren. Aber das würde bedeuten, dass Ihr Paket einen Zustand hat, d. H. Eine Variable, die im Paket deklariert ist, und nicht in einer Prozedur (und nichts mit dem "dbms_output" zu tun hat). –