Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-06508:PL/SQL:aufgerufene Programmeinheit konnte nicht gefunden werden

Ich vermute, Sie melden nur den letzten Fehler in einem Stack wie folgt:

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, liegt das daran, dass Ihr Paket zustandsbehaftet ist:

Die Werte der Variablen, Konstanten und Cursor, die ein Paket deklariert (entweder in seiner Spezifikation oder seinem Hauptteil), bilden seinen Paketzustand . Wenn ein PL/SQL-Paket mindestens eine Variable, eine Konstante oder einen Cursor deklariert, ist das Paket zustandsbehaftet; andernfalls ist es zustandslos .

Beim Neukompilieren geht der Zustand verloren:

Wenn der Hauptteil eines instanziierten, zustandsbehafteten Pakets neu kompiliert wird (entweder explizit mit der „ALTER PACKAGE-Anweisung“ oder implizit), bewirkt der nächste Aufruf eines Unterprogramms im Paket, dass Oracle Database den vorhandenen Paketstatus verwirft und die Ausnahme ORA-04068.

Nachdem PL/SQL die Ausnahme ausgelöst hat, veranlasst ein Verweis auf das Paket, dass Oracle Database das Paket neu instanziiert, wodurch es neu initialisiert wird...

Sie können dies nicht vermeiden, wenn Ihr Paket einen Status hat. Ich denke, es ist ziemlich selten, dass ein Paket wirklich zustandsbehaftet sein muss, also sollten Sie alles, was Sie im Paket deklariert haben, überprüfen, aber außerhalb einer Funktion oder Prozedur, um zu sehen, ob es auf dieser Ebene wirklich benötigt wird. Da Sie jedoch auf 10g sind, beinhaltet das Konstanten, nicht nur Variablen und Cursor.

Aber der letzte Absatz aus der zitierten Dokumentation bedeutet, dass das nächste Mal, wenn Sie das Paket in derselben Sitzung referenzieren, Sie den Fehler nicht erhalten und es normal funktioniert (bis Sie es erneut kompilieren).