Использование Oracle SQL для создания вложенного XML
друзья,
Я использую Oracle 10g, и мне нужно сгенерировать результаты из таблицы с использованием SQL в следующем формате 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>
правила-показать записи, выбранной в внешнем ряду и subrows должна содержать все остальные записи, кроме той, что показана на внешний подряд. В записях нет иерархии.
в примере выше Король выбран во внешней строке, поэтому подстроки должны содержать все записи из emp за исключением короля.
этот запрос дает мне результат нужен:
select e.empno,
e.ename,
cursor(select empno,
ename
from emp where empno <> 7839)
from emp e
where empno = 7839
однако, когда я пытаюсь создать XML из этого, используя следующее:
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
я получаю следующую ошибку:
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.
Я пробовал использовать 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 это выводит XML в ожидаемом формате, он не показывает правильные имена элементов.
любая помощь в решении этого была бы очень признательна.
спасибо заранее
1 ответов
Это не работает?
select xmlelement("RESULTS",
xmlagg(xmlelement("ROW",
xmlelement("EMPNO", empno),
xmlelement("ENAME", ename),
(SELECT xmlagg(xmlelement("SUBROWS", xmlelement("ROW",
xmlelement("EMPNO", empno),
xmlelement("ENAME", ename)
)
)
)
FROM emp
WHERE empno <> 7839
)
)
)
)
from emp
where empno = 7839