Beim Kompilieren eines Pakets habe ich eine Fehlermeldung erhalten:
%Vor%Das fragliche Paket hat ungefähr 1 k Zeilen (Spezifikation) + 13 k Zeilen im Körper. Während ich darüber nachforschte, stieß ich auf diese Ask Tom Frage
Beim Kompilieren einer PL / SQL-Einheit wird der Compiler baut einen Parse-Baum. Das maximale Größe einer PL / SQL-Einheit ist bestimmt durch die Größe des Parse Baum. Eine maximale Anzahl von Diana-Knoten existiert in diesem Baum.
Bis zu 7.3 könnten Sie
2**14
(16K) haben Diana Knoten und von 8.0 bis 8.1.3,2**15
(32K) Diana Knoten waren erlaubt. Mit 8.1.3 wurde dieses Limit erreicht entspannt, so dass Sie jetzt haben können2**26
(d. h. 64M) Diana Knoten in diesem Baum für Paket und Typ Körper.Während es keinen einfachen Weg gibt übersetzen Sie die Grenzen in Linien des Quellcodes war es unser Beobachtung, dass es gewesen ist ungefähr 5 bis 10 Knoten pro Zeile des Quellcodes. Vor 8.1.3 Compiler könnte sauber bis zu kompilieren ungefähr 3.000 Zeilen Code.
Beginnend mit 8.1.3 war das Limit entspannt für Paketkörper und Typ Körper, die jetzt haben können ungefähr bis zu 6.000.000 Zeilen des Codes.Dies ist eine grobe Schätzung. Wenn dein Code hat viele Leerzeichen, lang Bezeichner usw. können Sie enden mit größerem Quellcode.
Nun, auch wenn Sie die letzte Liste über viele Leerzeichen & amp; große Kennzeichnungen, ich denke, es ist vernünftig zu dem Schluss, dass es keine wo oben genannten Grenzen zu schließen.
Weiter mehr,
So prüfen Sie die aktuelle Größe eines Pakets:
Um die Größe eines Pakets zu überprüfen, klicken Sie auf nächste verwandte Nummer, die Sie verwenden können, ist PARSED_SIZE im Datenwörterbuch Ansicht USER_OBJECT_SIZE. Dieser Wert liefert die Größe der DIANA in Bytes wie in
SYS.IDL_xxx$
gespeichert Tabellen und ist NICHT die Größe in der Gemeinschaftspool.[...]
Zum Beispiel können Sie beginnen Probleme mit einem 64K-Limit auftreten wenn die
PARSED_SIZE
inUSER_OBJECT_SIZE
ist nicht mehr als 50K.
Wenn Sie diese Ansicht abfragen, erhalten Sie ein Ergebnis von 48929
- also nehme ich an, es ist fair, 47k groß zu sein?
Der seltsame Teil ist, das gleiche Objekt aus einem anderen Schema zu holen und es in dem Bereich auszuführen, in dem ich Probleme mit der erfolgreichen Kompilierung habe.
Warum verursacht dieser spezielle Bereich ein Problem?
Kompiliert das Programm Ihren Code mit Debuginformationen? Anscheinend macht es einen Unterschied, der auf diesem Forumbeitrag veranschaulicht wird.
Das Problem beim Kompilieren für debug ist der zusätzliche Code, der hinzugefügt wird für das Debugging.
Sie können versuchen, diese Abfragen zu sehen:
%Vor%Beachten Sie die Unterschiede in der code_size, wenn Sie für das Debuggen kompilieren.
Wenn Sie mit DEBUG kompilieren, versuchen Sie, in normal zu kompilieren, so dass es keinen zusätzlichen Code generiert, der Ihren Fehler erzeugen kann.
Tags und Links compilation packages plsql oracle10g