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

वापसी प्रकार SETOF तालिका और अतिरिक्त फ़ील्ड होने का आसान तरीका?

आप कर सकते थे समग्र पंक्ति को समग्र प्रकार के रूप में लौटाएं और कुछ और जोड़ें:

CREATE OR REPLACE FUNCTION f_rowplus()
  RETURNS TABLE (rec demo, add_int int, add_txt text) AS
$func$
SELECT d, 5, 'baz'::text FROM demo d;
$func$  LANGUAGE sql;

लेकिन तब, जब आप साधारण कॉल का उपयोग करते हैं:

SELECT * FROM f_rowplus();

आपको तालिका demo . से पंक्ति मिलती है अलग समग्र प्रकार के रूप में। आपको कॉल करना होगा:

SELECT (rec).*,  add_int, add_txt FROM f_rowplus();

सभी व्यक्तिगत . प्राप्त करने के लिए स्तंभ। कोष्ठक आवश्यक हैं।

पोस्टग्रेज यहां थोड़ा असंगत है। यदि आप इसके साथ कोई फ़ंक्शन बनाते हैं:

CREATE OR REPLACE FUNCTION f_row2()
  RETURNS TABLE (rec demo) AS
...

फिर समग्र प्रकार demo चुपचाप अलग-अलग कॉलम (विघटित) में परिवर्तित हो जाता है। मूल मिश्रित प्रकार का कोई लिंक नहीं रहता है। आप घोषित आउटपुट कॉलम का संदर्भ नहीं दे सकते rec बिल्कुल, चूंकि इसे विघटित प्रकार के स्तंभों से बदल दिया गया है। इस कॉल के परिणामस्वरूप एक त्रुटि संदेश आएगा:

SELECT rec FROM f_row2();

यहाँ वही:

CREATE OR REPLACE FUNCTION f_row3(OUT rec demo)
  RETURNS SETOF demo AS
...

हालांकि , जैसे ही आप कोई भी . जोड़ते हैं अधिक OUT कॉलम, समग्र प्रकार घोषित (विघटित नहीं) के रूप में संरक्षित है और आप यह कर सकते हैं:

SELECT rec FROM f_rowplus();

पहले समारोह के साथ।

मैंने एक SQL Fiddle बनाया है रूपों का प्रदर्शन।

एक तरफ
किसी फ़ंक्शन का उपयोग करते समय FROM . में एकाधिक कॉलम लौटाते हैं सूची (टेबल फ़ंक्शन के रूप में) और SELECT . में विघटित करना इस तरह की सूची:

SELECT (rec).* FROM f_rowplus();

... फ़ंक्शन का अभी भी मूल्यांकन किया जाता है एक बार केवल - कॉल करते समय और SELECT . में डीकंपोज़िंग सीधे इस तरह सूची बनाएं:

SELECT (f_rowplus()).*;  -- also: different result

... हर कॉलम के लिए एक बार का मूल्यांकन करेगा वापसी प्रकार में। विवरण:




  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. अद्यतन का FROM पक्ष अद्यतन के लिए लक्षित तालिका से कैसे संबंधित है?

  3. अद्यतन करने योग्य दृश्य से डेटा वापस करना काम नहीं कर रहा है?

  4. Postgresql UUID हाइबरनेट द्वारा समर्थित है?

  5. postgreSQL - psql \i :किसी दिए गए पथ में स्क्रिप्ट कैसे निष्पादित करें