उपरोक्त कोड में चर के नाम ने आपको गुमराह किया है। आपका वैरिएबल outtable
table
में है प्रकार। रिकॉर्ड डेटा को रिकॉर्ड की तालिका में लाना संभव नहीं है, लेकिन आप इसे रिकॉर्ड में ही ला सकते हैं।
DECLARE
REFCUR SYS_REFCURSOR;
TYPE RECORDTYPE IS RECORD (COL1 NUMBER, COL2 VARCHAR(100));
outtable RECORDTYPE;
BEGIN
SP_OUT_RefCur_PARAM(REFCUR);
LOOP
FETCH REFCUR INTO outtable;
EXIT WHEN REFCUR%NOTFOUND;
dbms_output.put_line(outtable.col1);
END LOOP;
CLOSE REFCUR;
END;
अपडेट करें: यदि आप अपने आवेदन के बेहतर प्रदर्शन के लिए सभी डेटा प्राप्त करना चाहते हैं तो आपको बल्क कलेक्ट स्टेटमेंट का उपयोग करना होगा:
DECLARE
REFCUR SYS_REFCURSOR;
TYPE RECORDTYPE IS
RECORD (COL1 NUMBER, COL2 VARCHAR(100));
TYPE TABLETYPE IS
TABLE OF REFTABLETYPE
INDEX BY PLS_INTEGER;
outtable TABLETYPE;
BEGIN
SP_OUT_RefCur_PARAM(REFCUR);
LOOP
FETCH REFCUR INTO BULK COLLECT outtable;
EXIT WHEN outtable.COUNT = 0;
FOR indx IN 1 .. outtable.COUNT
LOOP
dbms_output.put_line(outtable(indx).col1);;
END LOOP;
END LOOP;
CLOSE REFCUR;
END;
नोट:बल्क स्टेटमेंट के साथ मेमोरी की खपत बिना की तुलना में बहुत अधिक है।
लेकिन अगर आप केवल पंक्तियों को ला रहे हैं और संसाधित कर रहे हैं - एक समय में एक पंक्ति BULK
में कोई ज़रूरत नहीं है कथन, बस कर्सर का उपयोग करें FOR LOOP
. (टॉम से पूछें
)