如何使用 pgAdmin 4.2 从 PG/PLSQL 中的函数返回整个 table 数据或多行。?
How to get entire table data or multiple rows returned from a function in PG/PLSQL with pgAdmin 4.2.?
我尝试使用 setof 和 table。 在 pgAdmin 4.2 中创建函数时没有 return类型称为 setof 或 table。如果我使用 setof 和 table 名称创建函数作为选定的 return 类型,它只会 return 一行 table。
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;
我希望我的函数 return table 具有所有行和列的数据。
它可以是 returns setof record
或 returns table(....)
或 setof table_name
对于 returns setof record
你必须在 使用 时指定列名函数。
您也没有 return 获得完整的结果,因为您只获取一行,将其放入记录中,然后 return 那个。要 return 一个真正的 "set",您需要在 PL/pgSQL 中使用 return query
。但是这样的函数最好写成 SQL 函数:
CREATE FUNCTION pgsql_returnrecords()
RETURNS table(name text, city text, id integer)
AS
$BODY$
select name,city,id
from test;
$BODY$
language sql;
如果您希望始终 return 来自 table test
的完整行,您可以使用 returns setof test
而不是 returns table(..)
[=22 来简化它=]
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 子句中使用类似 table 的函数:
select *
from pgsql_returnrecords() ;
我尝试使用 setof 和 table。 在 pgAdmin 4.2 中创建函数时没有 return类型称为 setof 或 table。如果我使用 setof 和 table 名称创建函数作为选定的 return 类型,它只会 return 一行 table。
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;
我希望我的函数 return table 具有所有行和列的数据。
它可以是 returns setof record
或 returns table(....)
或 setof table_name
对于 returns setof record
你必须在 使用 时指定列名函数。
您也没有 return 获得完整的结果,因为您只获取一行,将其放入记录中,然后 return 那个。要 return 一个真正的 "set",您需要在 PL/pgSQL 中使用 return query
。但是这样的函数最好写成 SQL 函数:
CREATE FUNCTION pgsql_returnrecords()
RETURNS table(name text, city text, id integer)
AS
$BODY$
select name,city,id
from test;
$BODY$
language sql;
如果您希望始终 return 来自 table test
的完整行,您可以使用 returns setof test
而不是 returns table(..)
[=22 来简化它=]
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 子句中使用类似 table 的函数:
select *
from pgsql_returnrecords() ;