अगर GetQuestions
एक फ़ंक्शन है जो एक रिफ़कर्सर लौटाता है, जो ऐसा लगता है कि आपके पास SQL सर्वर संस्करण में है, तो इसके बजाय आप ऐसा कुछ करने में सक्षम हो सकते हैं:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
या यदि आपको PL/SQL ब्लॉक में इसकी आवश्यकता है तो आप कर्सर में उसी चयन का उपयोग कर सकते हैं।
आप फ़ंक्शन को dbms_output
. भी बना सकते हैं इसके बजाय स्टेटमेंट्स ताकि वे डिबगिंग के लिए हमेशा उपलब्ध रहें, हालांकि यह थोड़ा ओवरहेड जोड़ता है।
संपादित करें
हम्म, सुनिश्चित नहीं है कि cast()
. करना संभव है जब तक आप पैकेज के बाहर अपना खुद का प्रकार (और उस प्रकार की एक तालिका) घोषित करने के इच्छुक नहीं हैं, तब तक उपयोग करने योग्य प्रकार के लिए लौटाए गए refcursor। हालांकि आप ऐसा कर सकते हैं, केवल परिणामों को डंप करने के लिए:
create package mypackage as
function getquestions(user in varchar2) return sys_refcursor;
end mypackage;
/
create package body mypackage as
function getquestions(user in varchar2) return sys_refcursor as
r sys_refcursor;
begin
open r for
/* Whatever your real query is */
select 'Row 1' col1, 'Value 1' col2 from dual
union
select 'Row 2', 'Value 2' from dual
union
select 'Row 3', 'Value 3' from dual;
return r;
end;
end mypackage;
/
var r refcursor;
exec :r := mypackage.getquestions('OMG Ponies');
print r;
और आप किसी अन्य प्रक्रिया या फ़ंक्शन में कॉल के परिणाम का उपयोग कर सकते हैं; यह बस इसे पीएल/एसक्यूएल के बाहर हो रहा है जो थोड़ा मुश्किल लगता है।
जोड़ने के लिए संपादित: इस दृष्टिकोण के साथ, यदि यह एक प्रक्रिया है तो आप अनिवार्य रूप से वही काम कर सकते हैं:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;