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

Test af PostgreSQL-funktioner, der bruger og returnerer refursor

Q1

Din "lille test" kan være almindelig 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;

Udfør COMMIT / ROLLBACK efter du inspicerede resultaterne. De fleste klienter viser kun resultatet af lat-kommandoen.

Mere i kapitlet Tilbagekommende markører i manualen.

Q2

Og hvis vi ikke kender rækketypen, der returneres, hvordan kunne vi gøre det?

Da du kun ønsker at inspicere resultaterne, kan du caste hele posten til text .På denne måde undgår du helt problemet med dynamiske returtyper for funktionen.

Overvej denne demo:

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. Sådan indsætter du Excel- eller CSV-data i tabel ved hjælp af grafisk brugergrænseflade i SQL Server - SQL Server / TSQL Tutorial Del 102

  2. MONTHNAME() Eksempler – MySQL

  3. Sådan læser du versionsnummer fra en databasefil i Android, som er placeret i aktiv mappe

  4. Udtales det "S-Q-L" eller "Sequel"?