1

主要是我正在寻找实现某种存储的视图/报告,但带有参数,以便您可以轻松地更新它们。

我尝试按照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 运行良好并返回所需的结果,但函数执行似乎只返回一项,而不是行列表(在我的情况下,选择返回单个文本列)。

4

2 回答 2

1

从参数中取出引号:

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
于 2013-05-01T11:33:16.140 回答
0

您可以使用 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 │
└───────┘
于 2013-05-01T12:24:18.777 回答