Mit Oracle-SQL zu erzeugen verschachtelte XML

Freunde,

Ich bin mit Oracle 10g und ich brauche generieren, die die Ergebnisse aus einer Tabelle mithilfe von SQL im folgenden xml-format:

<RESULTS>
    <ROW>
        <EMPNO>7839</EMPNO>
        <ENAME>KING</EMPNO>
        <SUBROWS>
            <ROW>
                <EMPNO>7369</EMPNO>
                <ENAME>SMITH</EMPNO>
                ... Rest of the EMP table records
                excluding KING
            </ROW>
        </SUBROWS>
    </ROW>
</RESULTS>

Der Regel ist die Anzeige der Datensatz ausgewählt, die in der äußeren Reihe und der subrows sollte enthalten alle anderen Datensätze ausschließen dargestellt, in der äußeren Reihe. Es gibt keine Hierarchie der Datensätze.

Im obigen Beispiel König ausgewählt ist, in der äußeren Reihe, so dass die subrows sollte enthalten alle Datensätze aus der emp ohne König.

Diese Abfrage gibt mir die Ergebnismenge, die ich brauche:

select e.empno,
       e.ename,
       cursor(select empno,
                     ename
              from emp where empno <> 7839) 
from emp e 
where empno = 7839

Aber wenn ich versuche zum generieren von XML aus, dies mit der folgenden:

select xmlelement("RESULTS",
           xmlagg(xmlelement("ROW",
                      xmlelement("EMPNO", empno),
                      xmlelement("ENAME", ename),
                          cursor(SELECT xmlagg(xmlelement("SUBROWS",  xmlelement("ROW",
                                                     xmlelement("EMPNO", empno),
                                                     xmlelement("ENAME", ename)
                                                                                )
                                                           )
                                               )
                                  FROM emp 
                                  WHERE empno <> 7839
                                  )                            
                            )

                 )
                 )                 
from emp 
where empno = 7839

Bekomme ich die folgende Fehlermeldung:

ORA-22902: CURSOR expression not allowed
22902. 00000 -  "CURSOR expression not allowed"
*Cause:    CURSOR on a subquery is allowed only in the top-level
           SELECT list of a query.

Habe ich versucht, mit DBMS_XMLGEN:

SELECT DBMS_XMLGEN.getXML('select empno,
                                  ename,
                                  cursor(select empno,
                                                ename
                                         from emp 
                                         where empno <> 7839) as SUBROWS
                            from emp 
                            where empno = 7839') 
FROM dual

Whist diese Ausgänge XML-Daten in das erwartete format ist es nicht das richtige element-Namen.

Jede Hilfe bei der Lösung dieses würde sehr geschätzt werden.

Vielen Dank im Voraus

Schreibe einen Kommentar