अपडेट करें :देखें यह बेहतरीन ट्यूटोरियल पुनर्खरीदकर्ताओं को लाने और प्रबंधित करने के तरीके के स्पष्टीकरण के लिए।
चूंकि नोड-पोस्टग्रेज उन रिफर्सर्स को नहीं पहचान रहा है जिन्हें आप परिणाम सेट हैंडल के रूप में वापस कर रहे हैं, ऐसा लगता है कि यह पोस्टग्रेएसक्यूएल से एकाधिक परिणाम सेट का समर्थन नहीं करता है। यह काफी उचित है क्योंकि PostgreSQL वास्तव में कई परिणाम सेटों का समर्थन नहीं करता है, वे केवल refcursors के साथ अनुकरण किए जाते हैं।
आप FETCH
कर सकते हैं एक refcursor
. से SQL-स्तरीय कर्सर कमांड के माध्यम से SQL-स्तर कर्सर कमांड
, हालांकि इसके लिए प्रलेखन दयनीय है। आपको PL/PgSQL
का उपयोग करने की आवश्यकता नहीं है इसे करने के लिए कर्सर हैंडलिंग। बस:
FETCH ALL FROM "<unnamed portal 1>";
दोहरे उद्धरण चिह्नों पर ध्यान दें, जो महत्वपूर्ण हैं। <unnamed portal 1>
के लिए अपने फ़ंक्शन से लौटाए गए refcursor नाम को उपशीर्षक दें ।
यह भी ध्यान दें कि जब तक कर्सर WITH HOLD
नहीं बनाया गया था, तब तक refcursor बनाने वाला लेन-देन खुला होना चाहिए . गैर-HOLD
लेन-देन करने या वापस रोल करने पर कर्सर बंद हो जाते हैं।
उदाहरण के लिए, डमी रिफकर्सर-रिटर्निंग फ़ंक्शन दिया गया:
CREATE OR REPLACE FUNCTION dummy_cursor_returning_fn() RETURNS SETOF refcursor AS $$
DECLARE
curs1 refcursor;
curs2 refcursor;
BEGIN
OPEN curs1 FOR SELECT generate_series(1,4);
OPEN curs2 FOR SELECT generate_series(5,8);
RETURN NEXT curs1;
RETURN NEXT curs2;
RETURN;
END;
$$ LANGUAGE 'plpgsql';
... जो कर्सर का एक सेट लौटाता है, आप पोर्टल नामों को FETCH
पर पास करके परिणाम प्राप्त कर सकते हैं , जैसे:
regress=# BEGIN;
BEGIN
regress=# SELECT dummy_cursor_returning_fn();
dummy_cursor_returning_fn
---------------------------
<unnamed portal 7>
<unnamed portal 8>
(2 rows)
regress=# FETCH ALL FROM "<unnamed portal 7>";
generate_series
-----------------
1
2
3
4
(4 rows)
regress=# FETCH ALL FROM "<unnamed portal 8>";
generate_series
-----------------
5
6
7
8
(4 rows)
regress=#