Как получить целые данные таблицы или несколько строк, возвращаемых функцией из PG / PLSQL с помощью pgAdmin 4.2.? - PullRequest
0 голосов
/ 12 марта 2019

Я пытался использовать setof и table. При создании функции в pgAdmin 4.2 нет возвращаемого типа, называемого setof или table.Если я создаю функцию с setof и именем таблицы в качестве выбранного возвращаемого типа, она возвращает только одну строку таблицы.

CREATE FUNCTION pgsql_returnrecords() RETURNS SETOF RECORD(name char, city, char, id integer) AS 
$BODY$
DECLARE
 rec RECORD;
BEGIN
select name,city,id INTO rec from test;
return next rec;
END;
$BODY$ language plpgsql;

Я хочу, чтобы моя функция возвращала данные таблицы со всеми строками и столбцами.

1 Ответ

0 голосов
/ 12 марта 2019

Это либо returns setof record, либо returns table(....), либо setof table_name. С returns setof record необходимо указать имена столбцов, когда с использованием функции.

Вы также не возвращаете полный результат, потому что вы выбираете только одну строку, помещаете ее в запись и возвращаете ее. Чтобы вернуть реальный «набор», вам нужно использовать return query в PL / pgSQL. Но такая функция гораздо лучше написана как функция SQL:

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS table(name text, city text, id integer) 
AS 
$BODY$
  select name,city,id 
  from test;
$BODY$ 
language sql;

Если вы хотите всегда возвращать полную строку из таблицы test, вы можете упростить это, используя returns setof test вместо returns table(..)

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS setof test
AS 
$BODY$
  select *
  from test;
$BODY$ language sql;

Или, если вы настаиваете на PL / pgSQL:

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS table(name text, city text, id integer) 
AS 
$BODY$
BEGIN
return query
  select name,city,id   
  from test;
END;
$BODY$ 
language plpgsql;

В обоих случаях вы должны использовать функцию как таблицу в предложении FROM:

select *
from pgsql_returnrecords() ;
...