Amigos,Al utilizar Oracle SQL para generar XML anidada
Estoy utilizando Oracle 10g y que necesito para generar los resultados de una tabla utilizando SQL en el siguiente formato xml:
<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 regla es muestre el registro seleccionado en la fila externa y los subtítulos deben contener todos los demás registros, excluyendo el que se muestra en la fila externa. No hay jerarquía en los registros.
En el ejemplo anterior, King se selecciona en la fila externa por lo que los subrows deben contener todos los registros de emp excluyendo King.
Esta consulta me da el conjunto de resultados que necesito:
select e.empno,
e.ename,
cursor(select empno,
ename
from emp where empno <> 7839)
from emp e
where empno = 7839
Sin embargo, cuando intento generar XML desde esta utilizando la siguiente:
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
me sale el siguiente error:
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.
He intentado usar 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 esto genera XML en el formato esperado, no muestra los nombres correctos de los elementos.
Cualquier ayuda para resolver esto sería muy apreciada.
Gracias de antemano
+1 y la respuesta. Muchas gracias. Desestimé la ruta de la subconsulta de escaladores (¡tontamente sin intentarlo!) Porque pensé que regresaría más una fila, pero ese no es el caso con xmlagg, por supuesto. –