(यह सब पोस्टग्रेस्क्ल 8.3.7 के साथ परीक्षण किया गया है-- क्या आपके पास पहले का संस्करण है? बस "$ 1 के लिए उपनाम" के अपने उपयोग को देख रहे हैं)
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
RETURNS SETOF RECORD AS $$
DECLARE
open_id ALIAS FOR $1;
result RECORD;
BEGIN
RETURN QUERY SELECT '1', '2', '3';
RETURN QUERY SELECT '3', '4', '5';
RETURN QUERY SELECT '3', '4', '5';
END
$$;
यदि आपके पास वापस जाने के लिए एक रिकॉर्ड या पंक्ति चर है (क्वेरी परिणाम के बजाय), तो "रिटर्न QUERY" के बजाय "रिटर्न नेक्स्ट" का उपयोग करें।
फ़ंक्शन को लागू करने के लिए आपको कुछ ऐसा करने की आवश्यकता है:
select * from storeopeninghours_tostring(1) f(a text, b text, c text);
तो आपको यह परिभाषित करना होगा कि आप क्वेरी में फ़ंक्शन की आउटपुट पंक्ति स्कीमा की अपेक्षा करते हैं। इससे बचने के लिए, आप फ़ंक्शन परिभाषा में आउटपुट चर निर्दिष्ट कर सकते हैं:
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;
(बिल्कुल निश्चित नहीं है कि अतिरिक्त ::टेक्स्ट कास्ट की आवश्यकता क्यों है... '1' डिफ़ॉल्ट रूप से एक वर्चर है?)