Das Szenario, das diese Frage erstellt hat:
Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.
Es hat uns schon einmal überrascht.
Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.
Oder Sie können die folgende Tabelle abfragen, um zu sehen, welche Abhängigkeiten Sie haben
%Vor%Dies zeigt alle Abhängigkeiten an. Für Ihre Objekte fragen Sie user_dependencies ab.
Das Szenario, das diese Frage erstellt hat:
Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.
Es hat uns schon einmal überrascht.
Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.
Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus
Von Überraschung überrascht?
Nicht sicher, was die Implikationen davon sind ...
Hat etwas in der Produktion gebrochen?
Was genau ist passiert?
Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?
Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).
Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.
Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.
Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.
Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"
Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.
Zusätzlich zur Antwort von Thomas Jones-Low wird ein abhängiges Objekt möglicherweise nicht als ungültig markiert, wenn Sie nur das Paket BODY ändern.
Sobald Sie jedoch die Paketspezifikation ändern, wird dies zwangsläufig passieren.
Wenn Sie versuchen, ein ungültiges Oracle-Paket auszuführen, versucht Oracle, es zu kompilieren. Nur wenn es nach dem Kompilieren von Oracle ungültig bleibt, wird eine Ausnahme ausgelöst.
Wenn Sie ein beliebiges Objekt ändern, auf das ein Paket angewiesen ist (z. B. Tabellen, Ansichten, Trigger, andere Pakete), wird das Paket automatisch als ungültig markiert. Wie oben bereits erwähnt, ist Oracle schlau genug, das Paket neu zu kompilieren, wenn es zum ersten Mal verwendet wird.
Wenn Sie sich darüber Gedanken machen, führen Sie jedes Mal, wenn Sie Schemaänderungen vornehmen (z. B. Tabellen, Sichten, Trigger, Prozeduren), ein DBMS_UTILITY.compile_schema
aus (oder lassen Sie dies von Ihrem Datenbankadministrator tun). Dies wird zwingen, alle Pakete zu kompilieren und Sie wissen zu lassen, wo oder ob es Fehler gibt, bevor Sie sie auf die harte Tour finden.
Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus
Von Überraschung überrascht?
Nicht sicher, was die Implikationen davon sind ...
Hat etwas in der Produktion gebrochen?
Was genau ist passiert?
Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?
Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).
Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.
Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.
Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.
Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"
Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.
Oder Sie können die folgende Tabelle abfragen, um zu sehen, welche Abhängigkeiten Sie haben
%Vor%Dies zeigt alle Abhängigkeiten an. Für Ihre Objekte fragen Sie user_dependencies ab.
Das Szenario, das diese Frage erstellt hat:
Wir haben ein Paket, das eine Abhängigkeit von einem anderen Paket darstellt. Manchmal bewirkt das Ändern des Pakets "parent", dass das abhängige Paket ungültig wird, manchmal jedoch auch nicht.
Es hat uns schon einmal überrascht.
Es wäre sehr nützlich, einfach zu verstehen, was die Invalidierung verursacht, damit ich es vorhersagen / planen kann.
Übrigens, wenn ich mich völlig in der Situation irre ... Entschuldigung im Voraus
Von Überraschung überrascht?
Nicht sicher, was die Implikationen davon sind ...
Hat etwas in der Produktion gebrochen?
Was genau ist passiert?
Der Grund, warum ich frage, ist, weil es viel schwieriger ist, die Auswirkungen aller möglichen Veränderungen zu verstehen, als mit dem Ergebnis umzugehen. Warum wird die Annullierung zu einem Problem? Meine Vermutung ist, weil Sie einen Fehler "Existierender Zustand des Pakets wurde verworfen" in Ihrer Anwendung haben. Ist das das REAL Problem?
Ich vermute wieder, dass es das ist, und wenn es so ist, lassen Sie uns das nur anstellen statt der Liste der Änderungen, die, wie ich in einen Kommentar einfüge, versionsspezifisch sind. (11g verfolgt die Abhängigkeit bis hinunter zu der Spalte einer Tabelle anstelle der Tabelle als Ganzes).
Dies scheint Ihnen nicht wichtig zu sein wenn Sie den Paketstatus nicht verwenden. Wenn Sie dies wären, wäre dies ein wichtiger Fehler und Sie wären nicht überrascht gewesen, also ich vermute, Sie sind nicht.
Da du nicht dieser Fehler bist ist es in Ordnung zu ignorieren. Da Sie sie ignorieren können, können Sie Ihre Clientanwendung so programmieren, dass sie diesen Fehler ignoriert und Ihren Anruf erneut versucht, da Oracle Ihr Paket für Sie neu kompilieren wird, wie andere bereits erwähnt haben. Dies ist eine lohnende Übung. Denn anstatt jede mögliche Sache zu kennen, um die du dich sorgen musst, wenn du eine Veränderung machst, und dann im Notfall reparierst du eine davon, wird deine App einfach damit umgehen und ohne Sorgen weitergehen.
Ich stimme Thomas Jones-Low zu, aber es gibt ein paar weitere Probleme mit langen Sitzungen und Neukompilierung.
Wenn Sie ein Paket in einer Sitzung referenzieren und dieses Paket (oder ein abhängiges Paket) während derselben Sitzung neu kompiliert wird, erhalten Sie den Oracle-Fehler "ORA-06508: PL / SQL: Programmeinheit konnte nicht gefunden werden"
Nachdem Sie das Paket in einer Sitzung referenziert haben, können Sie das Paket im Allgemeinen nicht ändern, ohne es für diese Sitzung ungültig zu machen. Dies ist ein besonderes Problem für Entwicklungsumgebungen, in denen Pakete häufig geändert werden, aber auch ein Problem für Produktionsumgebungen, in denen Sie einen kleinen Patch ausführen möchten, ohne die gesamte Umgebung zu beeinträchtigen. Beachten Sie, dass dieser Fehler auch dann auftritt, wenn die geänderten Pakete keine Fehler enthalten.
Zusätzlich zur Antwort von Thomas Jones-Low wird ein abhängiges Objekt möglicherweise nicht als ungültig markiert, wenn Sie nur das Paket BODY ändern.
Sobald Sie jedoch die Paketspezifikation ändern, wird dies zwangsläufig passieren.
Wenn Sie versuchen, ein ungültiges Oracle-Paket auszuführen, versucht Oracle, es zu kompilieren. Nur wenn es nach dem Kompilieren von Oracle ungültig bleibt, wird eine Ausnahme ausgelöst.
Wenn Sie ein beliebiges Objekt ändern, auf das ein Paket angewiesen ist (z. B. Tabellen, Ansichten, Trigger, andere Pakete), wird das Paket automatisch als ungültig markiert. Wie oben bereits erwähnt, ist Oracle schlau genug, das Paket neu zu kompilieren, wenn es zum ersten Mal verwendet wird.
Wenn Sie sich darüber Gedanken machen, führen Sie jedes Mal, wenn Sie Schemaänderungen vornehmen (z. B. Tabellen, Sichten, Trigger, Prozeduren), ein %code% aus (oder lassen Sie dies von Ihrem Datenbankadministrator tun). Dies wird zwingen, alle Pakete zu kompilieren und Sie wissen zu lassen, wo oder ob es Fehler gibt, bevor Sie sie auf die harte Tour finden.
Tags und Links dependencies package oracle plsql