जहां तक मुझे पता है, आप जो कोशिश कर रहे हैं वह सही वाक्यविन्यास है, लेकिन किसी भी मामले में यह रिटर्न प्रकार के उपयोगकर्ता-परिभाषित होने के कारण काम नहीं करेगा, जैसा कि आपको संदेह है।
यहां एक अंतर्निहित पाइपलाइन फ़ंक्शन के साथ एक उदाहरण दिया गया है। इसे स्थानीय रूप से कॉल करना निश्चित रूप से काम करता है:
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'));
रिटर्न:
SQL_ID: a, child number: 1 cannot be found
इसे डेटाबेस लिंक पर कॉल करना:
SELECT * FROM TABLE([email protected]('a',1,'ALL'));
इस त्रुटि के साथ विफल:
ORA-30626: function/procedure parameters of remote object types are not supported
संभवतः आपको ORA-904 मिल रहा है क्योंकि लिंक एक विशिष्ट स्कीमा पर जाता है जिसकी पैकेज तक पहुंच नहीं है। लेकिन किसी भी मामले में, यह काम नहीं करेगा, भले ही आप अपने स्थानीय स्कीमा में समान नाम के साथ एक समान प्रकार को परिभाषित करें, क्योंकि वे अभी भी Oracle के दृष्टिकोण से एक ही प्रकार के नहीं हैं।
आप निश्चित रूप से किसी दृश्य को दूरस्थ रूप से क्वेरी कर सकते हैं, इसलिए यदि संभावित मापदंडों का एक अच्छी तरह से परिभाषित सेट है, तो आप प्रत्येक पैरामीटर संयोजन के लिए एक दृश्य बना सकते हैं और फिर क्वेरी कर सकते हैं, जैसे:
CREATE VIEW display_cursor_a_1_all AS
SELECT * FROM TABLE(dbms_xplan.display_cursor('a',1,'ALL'))
;
यदि संभावित पैरामीटर मानों की सीमा बहुत बड़ी है, तो आप एक ऐसी प्रक्रिया बना सकते हैं जो पैरामीटर के किसी भी सेट को गतिशील रूप से आवश्यक दृश्य बनाता है। फिर हर बार जब आप क्वेरी निष्पादित करना चाहते हैं तो आपके पास दो-चरणीय प्रक्रिया होती है:
EXECUTE [email protected](parameters)
SELECT * FROM [email protected];
फिर आपको इस बारे में सोचना होगा कि क्या कई सत्र इसे समानांतर में बुला सकते हैं और यदि ऐसा है तो उन्हें एक-दूसरे पर कदम रखने से कैसे रोका जाए।