एक संभावित समाधान (जिसे अंततः सरल बनाया जा सकता है) कर्सर को संसाधित करने और फ़ंक्शन मान जोड़ने के लिए तालिका फ़ंक्शन का उपयोग करना है।
मान लें कि sys_refcursor लौटाने वाले फ़ंक्शन को get_cur
कहा जाता है और यह कि कर्सर में कॉलम ID, NAME
. होता है (यह महत्वपूर्ण है, क्योंकि टेबल फंक्शन को टाइप डेफिनिशन की आवश्यकता होती है)।
आप पंक्ति (अतिरिक्त पथ कॉलम सहित) और परिणामी तालिका के लिए TYPE घोषित करते हैं।
create type t_row is object
( id number(10),
name varchar2(10),
path varchar2(10)
);
/
create type t_rows is table of t_row;
/
और टेबल फंक्शन को परिभाषित करें जो कर्सर ला रहा है और फंक्शन कॉल जोड़ रहा है।
create or replace function get_cur2 return
t_rows
PIPELINED
as
cv_out sys_refcursor;
id number;
name varchar2(100);
begin
cv_out := get_cur;
loop
FETCH cv_out INTO id, name;
exit when cv_out%NOTFOUND;
pipe row(t_row(id,name, GetRegionPath(id)));
end loop;
close cv_out;
return;
end;
/
अब आप टेबल फ़ंक्शन से डेटा का चयन कर सकते हैं
select * from table(get_cur2);
ID NAME PATH
---------- ---------- ----------
1 one path 1
2 two path 2
और निश्चित रूप से आप इस क्वेरी का उपयोग तीसरे फ़ंक्शन में एक कर्सर खोलने के लिए कर सकते हैं जो अतिरिक्त पथ कॉलम के साथ SYS_REFCURSOR लौटाएगा।