दोस्त उत्पन्न करने के लिए,Oracle SQL का उपयोग नेस्टेड एक्सएमएल
मैं Oracle 10g उपयोग कर रहा हूँ और मैं निम्नलिखित 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>
शासन करने के लिए है बाहरी पंक्ति में चयनित रिकॉर्ड दिखाएं और उपरोक्त में बाहरी पंक्ति में दिखाए गए सभी को छोड़कर सभी अन्य रिकॉर्ड होना चाहिए। रिकॉर्ड के लिए कोई पदानुक्रम नहीं है।
ऊपर दिए गए उदाहरण में राजा को बाहरी पंक्ति में चुना जाता है ताकि उपरोक्त राजा को छोड़कर एमएम से सभी रिकॉर्ड हो।
इस क्वेरी मुझे परिणाम सेट देता है मैं की जरूरत है:
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.
मैंने डीबीएमएस_एक्सएमएलजीएन का उपयोग करने की कोशिश की है:
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
यह एक्सएमएल अपेक्षित प्रारूप में एक्सएमएल आउटपुट करता है जो सही तत्व नाम नहीं दिखाता है।
इसे हल करने में कोई भी मदद की बहुत सराहना की जाएगी।
अग्रिम धन्यवाद
+1 और उत्तर। बहुत बहुत धन्यवाद। मैंने स्केलर सबक्वायरी रूट को खारिज कर दिया (बेवकूफ इसे कोशिश किए बिना!) क्योंकि मैंने सोचा था कि मैं एक और पंक्ति लौट रहा हूं लेकिन यह निश्चित रूप से xmlagg के मामले में नहीं है! –