दिए गए उदाहरण को RETURN QUERY
. से पूरी तरह बदला जा सकता है :
BEGIN
RETURN QUERY SELECT y_.y, 'hi' FROM generate_series(1,10,1) AS y_(y)
END;
जो एक लॉट . होगा तेज़।
सामान्य तौर पर आपको जहां भी संभव हो पुनरावृत्ति से बचना चाहिए, और इसके बजाय सेट-उन्मुख संचालन का पक्ष लेना चाहिए।
जहां return next
एक लूप पर अपरिहार्य है (जो बहुत दुर्लभ है, और अधिकतर जब आपको अपवाद हैंडलिंग की आवश्यकता होती है) तो आपको OUT
सेट करना होगा पैरामीटर मान या तालिका पैरामीटर, फिर return next
बिना तर्क के।
इस मामले में आपकी समस्या लाइन है SELECT yr.y, 'hi';
जो कुछ नहीं करता। आप मान रहे हैं कि SELECT
. का निहित गंतव्य out पैरामीटर है, लेकिन ऐसा नहीं है। आपको आउट पैरामीटर का उपयोग लूप वैरिएबल के रूप में करना होगा जैसे @peterm ने किया, असाइनमेंट का उपयोग करें या SELECT INTO
का उपयोग करें :
FOR yr IN SELECT * FROM generate_series(1,10,1) AS y_(y)
LOOP
RAISE NOTICE 'Computing %', yr.y;
y := yr.y;
result := 'hi';
RETURN NEXT;
END LOOP;
RETURN;