यह संभव MSSQL में एक Postgres समारोह से कई परिणाम सेट वापस जाने के लिए, की तरह है:कई परिणाम लौटने PostgreSQL समारोह सेट
CREATE PROCEDURE test
AS
SELECT * FROM first_table
SELECT * FROM second_table
यह संभव MSSQL में एक Postgres समारोह से कई परिणाम सेट वापस जाने के लिए, की तरह है:कई परिणाम लौटने PostgreSQL समारोह सेट
CREATE PROCEDURE test
AS
SELECT * FROM first_table
SELECT * FROM second_table
हां।
उदाहरण:
test=# create function x() returns setof integer language plpgsql as $$ begin return next 1; return next 2; end $$;
CREATE FUNCTION
test=# select * from x();
x
---
1
2
(2 rows)
आप निश्चित रूप से एक मौजूदा तालिका/दृश्य या लौटे प्रकार के लिए एक कस्टम प्रकार का उपयोग कर सकते हैं।
उदाहरण भाषा का प्रयोग एसक्यूएल:
test=# create table customer (name varchar, birth_date date);
CREATE TABLE
test=# create function y() returns setof customer language sql as $$
select * from customer
union all
select * from customer
$$;
CREATE FUNCTION
test=# insert into customer values ('joe', now()::date);
INSERT 0 1
test=# insert into customer values ('jill', now()::date);
INSERT 0 1
test=# select * from y();
name | birth_date
------+------------
joe | 2009-04-16
jill | 2009-04-16
joe | 2009-04-16
jill | 2009-04-16
(4 rows)
CREATE OR REPLACE FUNCTION "pr_GetCustomersAndOrders"()
RETURNS SETOF refcursor AS
$BODY$DECLARE
customerRC refcursor;
orderRC refcursor;
BEGIN
open customerRC FOR
SELECT * FROM customers;
RETURN NEXT customerRC;
open orderRC FOR
SELECT * FROM orders;
RETURN NEXT orderRC;
RETURN;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION "pr_GetCustomersAndOrders"() OWNER TO postgres;
I.o.w. refcursors का उपयोग कर :)
first_table
और second_table
एक ही लेआउट, आप भी बस का उपयोग कर सकते है
SELECT * FROM first_table WHERE ...
UNION ALL
SELECT * FROM second_table WHERE ...
[संपादित करें: एक टिप्पणीकार (जिसका नाम शायद "अशक्त" नहीं है :)) के लिए धन्यवाद के लिए (लंबी टी से पहले उनका कहना है कि UNION ALL
UNION
से तेज है।]
नाइटपिकिंग, लेकिन यूनियन सभी तेज होंगे (कोई "| sort | uniq" नहीं है), लेकिन अगर कोई है तो डुप्लिकेट वापस कर देगा। – tommym
@ शून्य: अच्छा बिंदु; अपडेट किया गया। (मुझे लगता है कि आपका नाम शायद "शून्य" नहीं है - ऐसा लगता है कि हाल ही में बहुत कुछ बग इसका कारण बनता है। मैं अपने प्रोफाइल पेज पर शीर्ष फ़ील्ड को संपादित करके इसे ठीक करने में सक्षम था।) –
हां लेकिन वापस आने वाले प्रश्नों के बारे में क्या है वही लेआउट? अगर हमें कई सेट प्राप्त करने की ज़रूरत है तो यह काफी सीमित है। मैं SQL सर्वर में संग्रहित प्रक्रिया का उपयोग करता हूं जो 10+ परिणाम सेट देता है। PostgreSQL में ऐसा कुछ भी? – MaxiWheat
एक सरल रास्ता PostgreSQL 8.3 के बाद से आसपास किया गया है उसके प्रश्न पूछा गया था):
CREATE FUNCTION test()
RETURNS SETOF first_table AS
$func$
BEGIN
RETURN QUERY
SELECT * FROM first_table;
RETURN QUERY
SELECT * FROM second_table; -- has to return same rowtype as first_table!
END
$func$ LANGUAGE plpgsql;
कॉल:
SELECT * FROM test();
manual on RETURN QUERY देखें।
विभिन्न पंक्ति प्रकारों के लिए क्या? क्या कोई समाधान है? कर्सर के अलावा। मैं एक कॉल पर दो रिकॉर्ड प्राप्त करने के लिए देख रहा हूँ। –
@UdeetSolanki: किसी फ़ंक्शन से प्रत्यक्ष परिणाम के रूप में संभव नहीं है। इसके चारों ओर विभिन्न तरीके हैं: कर्सर, अस्थायी तालिकाओं, दस्तावेज़ प्रकार जैसे 'json'। मेरा सुझाव है कि आप एक नया सवाल पूछें, टिप्पणियां जगह नहीं हैं। –
आप केवल 1 टेबल, तालिका "ग्राहक" का उपयोग करते हैं। सवाल कई परिणाम सेट के बारे में है! – llouk