ठीक है, क्षमा करें यह पूरा नहीं हुआ है, लेकिन @Lukas के साथ फॉलोअप करने के लिए, मेरे पास अब तक जो है वह यहां दिया गया है:
सबसे पहले, किसी भी डेटा/किसी भी प्रकार के प्रकार बनाने की कोशिश करने के बजाय, मैंने कर्सर से निकाले गए एक्सएमएल का उपयोग करने की कोशिश की ... अजीब, लेकिन यह सामान्य:
CREATE OR REPLACE procedure printCur(in_cursor IN sys_refcursor) IS
begin
FOR c IN (SELECT ROWNUM rn,
t2.COLUMN_VALUE.getrootelement () NAME,
EXTRACTVALUE (t2.COLUMN_VALUE, 'node()') VALUE
FROM TABLE (XMLSEQUENCE (in_cursor)) t,
TABLE (XMLSEQUENCE (EXTRACT (COLUMN_VALUE, '/ROW/node()'))) t2
order by 1)
LOOP
DBMS_OUTPUT.put_line (c.NAME || ': ' || c.VALUE);
END LOOP;
exception
when others then raise;
end;
/
अब, इसे कॉल करने के लिए, आपको एक कर्सर की आवश्यकता है, इसलिए मैंने pl/sql में कर्सर को कास्ट करने का प्रयास किया, कुछ ऐसा:
open v_cur for select * from table(cast(v_tab as tab_type));
लेकिन v_tab को कैसे परिभाषित किया जाता है, इस पर निर्भर करते हुए, यह pl/sql कास्ट में समस्याएं पैदा कर सकता है या नहीं भी हो सकता है (नेस्टेड टेबल डीफ़ में% पंक्ति प्रकार का उपयोग करने से समस्याएं आती हैं)।
वैसे भी, आप इस पर निर्माण कर सकते हैं या इसे अपनी पसंद के अनुसार परिष्कृत कर सकते हैं। (और संभवतः xmltable का उपयोग करें...)
आशा है कि यह मदद करता है