एक फ़ंक्शन को रिटर्न प्रकार घोषित करने की आवश्यकता होती है। एक सरणी केवल एक प्रसिद्ध तत्व प्रकार पर आधारित हो सकती है। एक अनाम रिकॉर्ड की अनुमति नहीं है। तो एक समग्र प्रकार बनाएं जो आपकी आवश्यकताओं के अनुरूप हो (जब तक कि कोई तालिका या दृश्य पहले से ही पंक्ति प्रकार को परिभाषित न करे)।
CREATE TYPE my_type (
ts text
, alertlevel int
, time_passed interval
);
परीक्षण उद्देश्यों के लिए आप एक सत्र की अवधि के लिए एक समग्र प्रकार को पंजीकृत करने के लिए एक अस्थायी तालिका भी बना सकते हैं:
CREATE TEMP TABLE my_type ( ...)
(सत्र के अंत में एक अस्थायी तालिका गिरा दी जाती है, उसके बाद प्रकार पर कोई भी फंक्शन बिल्डिंग टूट जाएगी।)
सरणी के लिए आधार प्रकार के रूप में इसका प्रयोग करें। आप इस उद्देश्य के लिए एक साधारण SQL फ़ंक्शन का उपयोग कर सकते हैं:
CREATE OR REPLACE FUNCTION foo()
RETURNS my_type[] AS
$func$
SELECT array_agg(result::my_type) -- you must cast the row type!
FROM (
SELECT to_char("Timestamp", 'YYYY-MM-DD HH24:MI:SS')
, "AlertLevel"
, "Timestamp" - lag("Timestamp") OVER (ORDER BY "Timestamp")
FROM "Judgements"
WHERE "SampleID" = sampleid
AND "Timestamp" >= starttime
AND "Timestamp" <= stoptime
) result
WHERE "AlertLevel" > 0;
$func$
LANGUAGE sql;
कॉल करें:
SELECT foo();
text[]
के साथ सरल विकल्प
आप text
. पर भी कास्ट कर सकते हैं / text[]
. आप कॉलम नाम खो देते हैं और जानकारी टाइप कर देते हैं, लेकिन यह बिल्कुल अलग तरीके से काम करता है:
CREATE OR REPLACE FUNCTION foo()
RETURNS text[] AS
$func$
SELECT array_agg(result::text) -- cast the record to text!
FROM ( ... ) result
...;
$func$
LANGUAGE sql;
यदि आपको वास्तव में किसी सरणी की आवश्यकता नहीं है, तो आप array_agg()
scrap को स्क्रैप कर सकते हैं , अलग-अलग पंक्तियों को वापस करें और रिटर्न प्रकार को RETURNS TABLE (...)
. के साथ घोषित करें . plpgsql
के लिए SO खोजें टैग, आपको कई उदाहरण मिलेंगे ..
सेट-रिटर्निंग फ़ंक्शन को इसके साथ कॉल करना याद रखें:
SELECT * FROM foo();