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

पोस्टग्रेएसक्यूएल फ़ंक्शंस का परीक्षण करना जो refcursor का उपभोग और वापसी करता है

Q1

आपका "छोटा परीक्षण" सादा SQL हो सकता है:

BEGIN;
SELECT get_function_that_returns_cursor('ret', 4100, 'foo', 123); -- note: 'ret'
FETCH ALL IN ret; -- works for any rowtype

COMMIT;  -- or ROLLBACK;

COMMIT निष्पादित करें / ROLLBACK बाद आपने परिणामों का निरीक्षण किया। अधिकांश क्लाइंट केवल लेट कमांड का परिणाम प्रदर्शित करते हैं।

अध्याय में अधिक रिटर्निंग कर्सर मैनुअल के।

Q2

<ब्लॉकक्वॉट>

और अगर हम उस पंक्ति प्रकार को नहीं जानते जो लौटाया जा रहा है तो हम इसे कैसे कर सकते हैं?

चूंकि आप केवल परिणामों का निरीक्षण करना चाहते हैं, आप संपूर्ण रिकॉर्ड को text में डाल सकते हैं .इस तरह आप फ़ंक्शन के लिए डायनेमिक रिटर्न प्रकारों की समस्या से पूरी तरह बच जाते हैं।

इस डेमो पर विचार करें:

CREATE TABLE a (a_id int PRIMARY KEY, a text);
INSERT INTO a VALUES (1, 'foo'), (2, 'bar');

CREATE OR REPLACE FUNCTION reffunc(INOUT ret refcursor) AS  -- INOUT param :)
$func$
BEGIN
    OPEN ret FOR SELECT * FROM a;
END
$func$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION ctest()
  RETURNS SETOF text AS
$func$
DECLARE
    curs1 refcursor;
    rec   record;
BEGIN
  curs1 := reffunc('ret');   -- simple assignment
  
  LOOP
    FETCH curs1 INTO rec;
    EXIT WHEN NOT FOUND;     -- note the placement!
    RETURN NEXT rec::text;
  END LOOP;
END
$func$ LANGUAGE plpgsql;

-> SQLfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgreSQL - बनाम कोई भी

  2. PostgreSQL में ग्रेटेस्ट () फ़ंक्शन

  3. Ubuntu 20.04/18.04/16.04 पर PostgreSQL 12 कैसे स्थापित करें?

  4. डेटा को एक टेबल से दूसरी टेबल पर ले जाएं, पोस्टग्रेस्क्ल संस्करण

  5. SQLAlchemy और कई प्रक्रियाओं के साथ कनेक्शन की समस्या