sql >> Databáze >  >> RDS >> PostgreSQL

Testování funkcí PostgreSQL, které spotřebovávají a vracejí rekurzor

Q1

Váš „malý test“ může být prostý 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;

Proveďte COMMIT / ROLLBACK po zkontrolovali jste výsledky. Většina klientů zobrazí pouze výsledek příkazu lat.

Více v kapitole Vracející se kurzory manuálu.

Q2

A pokud neznáme typ řádku, který se vrací, jak bychom to mohli udělat?

Protože chcete pouze zkontrolovat výsledky, můžete přenést celý záznam do text .Úplně se tak vyhnete problému s dynamickými návratovými typy pro funkci.

Zvažte toto 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. Postgresql Vyberte řádky, kde sloupec =pole

  2. kam mám umístit instalační prostředky (soubor wxs, dmg-script, ikona) a jak nakonfigurovat maven antrun při nasazení samostatné aplikace

  3. Jak zabít všechny aktivní a neaktivní relace oracle pro uživatele

  4. Jak vytvořit pohledy historie NEBO auditování z tabulek pro zachycení změn dat (CDC) na serveru SQL Server - kurz SQL Server