[英]How to write a postgres function that returns a set of rows?
我主要是想实现某种存储的视图/报告,但是要有参数,以便您可以轻松地更新它们。
我试图按照http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions的指示进行操作,但到目前为止,我还无法获得结果列表。
CREATE OR REPLACE FUNCTION myreport(in TEXT) returns setof TEXT AS
$$
select * from ... where ... = '$1'
$$
language sql;
select * from myreport('XOP');
虽然内部SQL可以很好地工作并返回所需的结果,但似乎函数执行仅返回一项,而不是行列表(在我的情况下,select返回单个文本列)。
从参数中删除引号:
select * from ... where ... = $1
但这返回所有列,而不是函数定义( setof text
)中声明的单个文本列。 它应该是:
select text_col from ... where ... = $1
或者,如果您希望所有列都将其声明为返回一组setof the_table
:
CREATE OR REPLACE FUNCTION myreport(in TEXT) returns setof the_table AS
您可以使用TABLE返回类型返回几行:
CREATE FUNCTION plop() RETURNS TABLE (value int) AS $sql$
SELECT generate_series(1, 10) AS value;
$sql$ LANGUAGE sql;
然后
SELECT * FROM plop();
┌───────┐
│ value │
├───────┤
│ 1 │
│ 2 │
│ 3 │
...
│ 10 │
└───────┘
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.