PLS-00123: Programm zu groß (Diana-Knoten) beim Versuch, ein Paket zu kompilieren

9

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önnen    2**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 in    USER_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?

    
Sathya 10.02.2011, 11:45
quelle

1 Antwort

5

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.

    
рüффп 22.02.2011, 20:55
quelle