आप उस कर्सर को वापस करने के लिए एक PL/SQL फ़ंक्शन लिख सकते हैं (या यदि आपके पास इससे संबंधित अधिक कोड है तो आप उस फ़ंक्शन को पैकेज में रख सकते हैं):
CREATE OR REPLACE FUNCTION get_allitems
RETURN SYS_REFCURSOR
AS
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR SELECT * FROM allitems;
RETURN my_cursor;
END get_allitems;
यह कर्सर वापस कर देगा।
सुनिश्चित करें कि अपना SELECT
न डालें - जब संभव हो तो पीएल/एसक्यूएल में उद्धरणों में स्ट्रिंग करें। इसे स्ट्रिंग्स में डालने का मतलब है कि इसे कंपाइल समय पर चेक नहीं किया जा सकता है, और जब भी आप इसका इस्तेमाल करते हैं तो इसे पार्स करना पड़ता है।
यदि आपको वास्तव में गतिशील SQL का उपयोग करने की आवश्यकता है तो आप अपनी क्वेरी को सिंगल कोट्स में रख सकते हैं:
OPEN my_cursor FOR 'SELECT * FROM allitems';
जब भी फ़ंक्शन को कॉल किया जाता है, तो इस स्ट्रिंग को पार्स करना पड़ता है, जो आमतौर पर धीमा होगा और रनटाइम तक आपकी क्वेरी में त्रुटियों को छुपाता है।
हार्ड पार्स से बचने के लिए जहां संभव हो बाइंड-वेरिएबल का उपयोग करना सुनिश्चित करें:
OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;