PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Testowanie funkcji PostgreSQL, które wykorzystują i zwracają refcursor

Pierwszy kwartał

Twój „mały test” może być zwykłym 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;

Wykonaj COMMIT / ROLLBACK po sprawdziłeś wyniki. Większość klientów wyświetla tylko wynik polecenia lat.

Więcej w rozdziale Kursory powracające instrukcji.

Q2

A jeśli nie znamy zwracanego typu wiersza, jak możemy to zrobić?

Ponieważ chcesz tylko sprawdzić wyniki, możesz przesłać cały rekord do text .W ten sposób unikniesz całkowicie problemu z dynamicznymi typami zwracanymi dla funkcji.

Rozważ tę prezentację:

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:eksport danych wynikowych z zapytania SQL do Excela/CSV

  2. Czy istnieje sposób na załadowanie danych tekstowych do bazy danych w PostgreSQL?

  3. serial w postgresie jest zwiększany mimo że dodałem na konflikcie nic nie rób

  4. Przejście z MySQL na PostgreSQL - wskazówki, triki i niedogodności?

  5. Pula połączeń PostgreSQL:część 4 – PgBouncer kontra Pgpool-II