PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

array_agg () के साथ फ़ंक्शन के लिए वापसी प्रकार

एक फ़ंक्शन को रिटर्न प्रकार घोषित करने की आवश्यकता होती है। एक सरणी केवल एक प्रसिद्ध तत्व प्रकार पर आधारित हो सकती है। एक अनाम रिकॉर्ड की अनुमति नहीं है। तो एक समग्र प्रकार बनाएं जो आपकी आवश्यकताओं के अनुरूप हो (जब तक कि कोई तालिका या दृश्य पहले से ही पंक्ति प्रकार को परिभाषित न करे)।

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 (...) . के साथ घोषित करें . के लिए SO खोजें टैग, आपको कई उदाहरण मिलेंगे ..

सेट-रिटर्निंग फ़ंक्शन को इसके साथ कॉल करना याद रखें:

SELECT * FROM foo();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मेरा पसंदीदा पोस्टग्रेएसक्यूएल एक्सटेंशन - भाग दो

  2. .sql postgresql बैकअप से एकल तालिका को कैसे पुनर्स्थापित करें?

  3. PostgreSQL में लेफ्ट जॉइन क्या है?

  4. क्वेरी पर JOOQ टाइमस्टैम्प परिशुद्धता

  5. सभी स्तंभों के लिए खोज फ़िल्टर लागू करें