sql >> Database teknologi >  >> RDS >> PostgreSQL

understøtter node-postgres flere resultatsæt

OPDATERING :Se denne fremragende selvstudie for en forklaring på, hvordan man henter og administrerer refkursorer.

Da node-postgres ikke genkender de refcursorer, du returnerer som resultatsæt-håndtag, virker det sandsynligt, at det ikke understøtter flere resultatsæt fra PostgreSQL. Det er rimeligt nok, da PostgreSQL heller ikke rigtigt understøtter flere resultatsæt, de er blot emuleret med refkursorer.

Du kan FETCH fra en refcursor via markørkommandoer på SQL-niveau markørkommandoer på SQL-niveau , selvom dokumentationen for det er elendig. Du behøver ikke bruge PL/PgSQL markørhåndtering for at gøre det. Bare:

FETCH ALL FROM "<unnamed portal 1>";

Bemærk de dobbelte anførselstegn, som er vigtige. Substitut det refursornavn, der returneres fra din funktion, for <unnamed portal 1> .

Bemærk også, at transaktionen, der oprettede refursoren, stadig skal være åben, medmindre markøren blev oprettet WITH HOLD . Ikke-HOLD markører lukkes, når transaktionen forpligtes eller rulles tilbage.

For eksempel givet dummy-refcursor-retur-funktionen:

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';

... som returnerer et sæt markører, kan du få resultaterne ved at sende portalnavnene til FETCH , f.eks.:

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=# 



  1. Oracle-datosammenligning i where-klausulen

  2. Forstå Pivot Operator i SQL

  3. Sådan beregnes kumulativ total i MySQL

  4. MYSQL skjul feltdata, hvis værdi i et andet felt er angivet