ऐसा लगता है कि आप SYS_REFCURSOR
. की एक अज्ञात संख्या को मर्ज करना चाहते हैं परिणाम एक बड़े में सेट हो जाता है। यदि आप spSelect_Inv_Search
. से लौटे कर्सर की संरचना जानते हैं आप इसे एक मध्यवर्ती पाइपलाइन फ़ंक्शन के साथ कर सकते हैं।
create package p as
type tmp_rec_type is record (owner all_objects.owner%type,
object_type all_objects.object_type%type,
objects number);
type tmp_rec_table is table of tmp_rec_type;
procedure proc1(p_owner in varchar2, p_cursor out sys_refcursor);
function func2 return tmp_rec_table pipelined;
procedure proc3(p_cursor out sys_refcursor);
end;
/
प्रकारों को यहां परिभाषित किया जा सकता है, उन्हें SQL स्तर पर होने की आवश्यकता नहीं है क्योंकि आपको कभी भी उन्हें पैकेज के बाहर संदर्भित करने की आवश्यकता नहीं होगी।
create package body p as
procedure proc1(p_owner in varchar2, p_cursor out sys_refcursor) as
begin
open p_cursor for select owner, object_type, count(*)
from all_objects
where owner = p_owner
group by owner, object_type;
end;
function func2 return tmp_rec_table pipelined as
cursor c1 is select distinct owner
from all_tables where owner in ('SYS','SYSTEM');
tmp_cursor sys_refcursor;
tmp_rec tmp_rec_type;
begin
for r1 in c1 loop
proc1(r1.owner, tmp_cursor);
loop
fetch tmp_cursor into tmp_rec;
exit when tmp_cursor%notfound;
pipe row(tmp_rec);
end loop;
end loop;
end;
procedure proc3(p_cursor out sys_refcursor) as
begin
open p_cursor for select * from table(func2);
end;
end p;
/
फिर निष्पादित करने के लिए, जो आप मध्यवर्ती चरण के लिए उपयोग किए जाने वाले प्रकारों के बावजूद पैकेज के बाहर कर सकते हैं, आप इसे SQL*Plus या SQL डेवलपर में परीक्षण करने के लिए कर सकते हैं:
var rc refcursor;
exec p.proc3(:rc);
print rc;
मेरे डेटाबेस के लिए यह देता है:
OWNER OBJECT_TYPE OBJECTS
------------------------------ ------------------- ----------------------
SYSTEM VIEW 1
SYSTEM TABLE 5
SYS VIEW 1056
SYS CONSUMER GROUP 2
SYS PROCEDURE 11
SYS FUNCTION 56
SYS SEQUENCE 1
SYS OPERATOR 6
SYS EVALUATION CONTEXT 1
SYS TABLE 13
SYS WINDOW GROUP 1
SYS PACKAGE 162
SYS WINDOW 2
SYS TYPE 529
SYS JOB CLASS 1
SYS SCHEDULE 1
यह स्पष्ट रूप से बहुत ही काल्पनिक है क्योंकि आप इसे एक ही प्रश्न के रूप में करेंगे, लेकिन मुझे लगता है कि आपकी आंतरिक प्रक्रिया को कुछ और जटिल करने की आवश्यकता है।