7
我使用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>
的規則是顯示在外部行中選擇的記錄,並且子行應包含除外部行中顯示的記錄之外的所有其他記錄。記錄沒有層次結構。
在上面的例子中,King在外部行中被選中,因此這些子行應該包含除了King以外的所有記錄。
該查詢給我的結果集,我需要:
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和答案。非常感謝。我放棄了Scaler子查詢路由(愚蠢地沒有嘗試它!),因爲我認爲我會返回更多的行,但當然不是這種情況! – 2010-11-21 21:24:23