उदाहरण के लिए पोस्टग्रेज में, मेरे पास इस तरह की एक टेबल है

create table mytable (
a text,
b text
)

और एक फ़ंक्शन जो mytable से एक पंक्ति देता है

CREATE OR REPLACE FUNCTION single_row(param1, param2, ...) RETURNS mytable AS .....

फिर मैं इस फ़ंक्शन को एक ही प्रश्न में कई बार कैसे कॉल कर सकता हूं, और सभी पंक्तियों को वापस कर सकता हूं? जैसे कि मैं वास्तविक तालिका से चयन कर रहा था?
कुछ इस तरह

select * from { single_row(a1, a2, ...) + single_row(b1, b2, ...) + single_row(c1, c2, ...) }

मैं चाहता हूं कि परिणाम इस तरह हों

   a   |   b 
-------+-------
row1.a | row1.b 
row2.a | row2.b 
.
.
.
1
sify 16 सितंबर 2020, 14:27

2 जवाब

सबसे बढ़िया उत्तर

त्वरित और गंदा: यदि आप बहुत अधिक नहीं हैं, तो आप प्रत्येक फ़ंक्शन पर कॉलम को पार्स करने का प्रयास कर सकते हैं, उदा। यदि फ़ंक्शन f1 और f2 लौटाता है:

CREATE OR REPLACE FUNCTION single_row()
RETURNS TABLE (f1 INT, f2 INT) AS $$
BEGIN
  RETURN QUERY SELECT 1,2;
END;
$$ LANGUAGE plpgsql;

.. आप इसे इस तरह पार्स कर सकते हैं:

SELECT 
  (single_row()).f1,(single_row()).f2,
  (single_row()).f1,(single_row()).f2;

 f1 | f2 | f1 | f2 
----+----+----+----
  1 |  2 |  1 |  2

.. या एकाधिक सबक्वायरी का उपयोग करना:

SELECT * FROM 
  (SELECT * FROM single_row()) q1,
  (SELECT * FROM single_row()) q2

 f1 | f2 | f1 | f2 
----+----+----+----
  1 |  2 |  1 |  2

संपादित करें: टिप्पणियां देखें

SELECT * FROM single_row()
UNION ALL
SELECT * FROM single_row()
0
Jim Jones 16 सितंबर 2020, 17:19
 SELECT single_raw(), single_raw(), single_raw() ;
0
kofemann 16 सितंबर 2020, 14:33