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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert das nicht?