SYS_CONNECT_BY_PATH führt zu "ORA-01489: das Ergebnis der Zeichenfolgenverkettung ist zu lang"

Ich bin mit SYS_CONNECT_BY_PATH zu tun string aggregation. Die Allgemeine Form der Abfrage ist so etwas wie dieses:

select /*a bunch of fields unrelated to the problem*/,
--Use SYS_CONNECT_BY_PATH to glue together all the chunks of XML. 
--The XSL header and footer are prepended and appended here.
 , XMLType(to_clob('<?xml version="1.0"?><!-- begining of XSL file -->,'<!-- Next Section -->'))||'</xsl:stylesheet>')) AS XSL
from (
  select /*a bunch of fields unrelated to the problem*/
    case when x = 1 then to_clob('
    /*a bunch of XSL*/
     <xsl:text>'||subq.new_c_value||'</xsl:text>
    /*a whole bunch more xsl*/')
    else
     to_clob('/*a bunch of different XSL*/            
     <xsl:text>'||subq.new_f_value||'</xsl:text>
    /*a whole bunch more xsl*/')
    end as xsl,
  --curr and prev are to help with using sys_connect_by_path do string aggregation.
    rownum AS curr,
    rownum -1 AS prev
  from (Select /* details of subq not relevant */ ) as subq
)
CONNECT BY prev = PRIOR curr 
START WITH curr = 1;

Im Grunde bin ich der Ausführung einer Abfrage zu generieren, XSL, die verwendet wird, um korrekten XML-Dateien. Ich bin mit sys_connect_by_path zu kombinieren, die Zeichenfolgen zusammen in einem einzigen Stück, das ist einfacher als kopieren und einfügen ist für viele Werte, die aus vielen Zeilen. Ich kann nicht mit jeder benutzerdefinierte Zeichenfolge Aggregat-Funktionen, da diese Abfrage läuft auf eine Produktions-Datenbank, wo ich kann nicht einfach hergehen und Funktionen erstellen, wie ich will.

Das problem ist, dass das laufen meine Abfrage zurückgeben wird:

ORA-01489: das Ergebnis der Zeichenfolgenverkettung ist zu lang 
01489. 00000 - "Ergebnis der Zeichenfolgenverkettung ist zu lang" 
*Ursache: die String-Verkettung Ergebnis ist mehr als die maximale Größe. 
*Aktion: Stellen Sie sicher, dass das Ergebnis kleiner ist als die maximale Größe. 

...in Fällen, wo es zu viel Daten. Wie Sie sehen können, habe ich die Anwendung der to_clob() Funktion, um überall ich denke, es könnte helfen, aber es scheint nicht viel Unterschied. Gibt es andere Wege, um diese zu bewältigen, neben dem Rückgriff auf PL/SQL? Ich würde es vorziehen, zu halten, wie eine Abfrage, da das Ergebnis dieser Abfrage wird in einem Bericht die Vorlage, die zeigt eine Reihe von nützlichen Informationen zur side-by-side mit dem XSL. Es wäre schön, in der Lage zu tun, all dies in einem einzigen Schritt statt in mehreren Schritten.

(Oracle 10g)


Irgendwann habe ich diese Seite gefunden:

http://www.sqlsnippets.com/en/topic-11787.html

über die string-aggregation-Verfahren in Oracle. Ich vermute, die einzigen, die in meiner situation sind die XML-Methode und dem Modell, Methoden. Ich konnte nicht Holen Sie sich die Modell-Methoden zu arbeiten, ganz Recht, so ging ich einfach mit dem XML-Methode.

  • Dies wird hart werden. Hier ist ein Interessantes forum zum Thema. Zitieren eine Antwort: "Sie können SYS_CONNECT_BY_PATH bilden Teile der Zeichenfolge in einer sub-query, und dann verketten diese Teile in einen CLOB in der Haupt-Abfrage.". Viel Glück!
Schreibe einen Kommentar