PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Тестване на функции на PostgreSQL, които консумират и връщат рекурсора

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 след проверихте резултатите. Повечето клиенти показват само резултата от командата lat.

Повече в главата Връщане на курсори на ръководството.

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. Готови ли сме за Nordic PPGDay?

  2. Вземете краткото име на месеца в PostgreSQL

  3. Изгледи на списъци на PostgreSQL

  4. Сравняване на производителност и цени на PostgreSQL DigitalOcean – ScaleGrid срещу управлявани бази данни DigitalOcean

  5. Postgresql:Скриптове за изпълнение на psql с парола