À l'aide de Oracle SQL pour générer du XML imbriquée
Amis,
Je suis en utilisant Oracle 10g et j'ai besoin de générer les résultats à partir d'un tableau à l'aide de SQL dans le format xml suivant:
<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>
La règle est de montrer l'enregistrement sélectionné dans la ligne externe et la subrows doit contenir tous les autres dossiers à l'exclusion de celui indiqué dans la rangée externe. Il n'y a pas de hiérarchie de dossiers.
Dans l'exemple ci-dessus le Roi est sélectionné dans la rangée externe de sorte que le subrows doit contenir tous les enregistrements à partir de l'emp à l'exclusion de Roi.
Cette requête me donne l'ensemble des résultats dont j'ai besoin:
select e.empno,
e.ename,
cursor(select empno,
ename
from emp where empno <> 7839)
from emp e
where empno = 7839
Cependant lorsque j'essaie de générer un document XML à partir de ce qui suit:
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
J'obtiens l'erreur suivante:
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.
J'ai essayé d'utiliser 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 ce sorties XML dans le format attendu qu'il est ne montre pas le bon élément noms.
Toute aide dans la résolution de ce serait très apprécié.
Merci d'avance
OriginalL'auteur Ian Carpenter | 2010-11-21
Vous devez vous connecter pour publier un commentaire.
Cela ne fonctionne pas?
OriginalL'auteur gpeche