PostgreSQL 函数只返回一行

PostgreSQL Function returning only one row

我正在编写一个函数来接受一个参数列表和 return 一些记录集。当我 运行 单独 select 查询时,它显示所有行。但是从 Function 我只得到第一行。还在搜索大约一个小时,没有得到解决方案。

这是函数查询

CREATE OR REPLACE FUNCTION get_transaction_all_property(p_property character varying, p_year timestamp without time zone)
 RETURNS SETOF record
 LANGUAGE plpgsql
AS $function$
DECLARE
  l_num_property  numeric(15,2);
  l_num_strtamt numeric(15,2);
  l_num_endamt  numeric(15,2);
  l_property   varchar   := '';
  l_year    timestamp := LOCALTIMESTAMP;
  result RECORD;
BEGIN
  IF ( p_property IS NOT NULL ) THEN
    l_property := p_property;
  END IF;
  IF ( p_year IS NOT NULL ) THEN
    l_year := p_year;
  END IF;
  SELECT INTO l_num_property, l_num_strtamt, l_num_endamt 
    property, coalesce(sum(strtamt),0)::numeric(15,2), coalesce(sum(endamt),0)::numeric(15,2) from (
    (select a.property as property, SUM(b.strtamtg + b.strtamtl) AS strtamt, SUM(b.endamtg + b.endamtl) AS endamt 
    FROM "myTransactions" AS a 
    WHERE a.property::text = ANY(STRING_TO_ARRAY(l_property,',')) AND a.period < l_year
      group by a.property)
)as doo group by property;
  SELECT INTO result l_num_property, l_num_strtamt, l_num_endamt;
  RETURN next result;
END;
$function$
;

-- Permissions

ALTER FUNCTION get_transaction_all_property(varchar,timestamp,int8) OWNER TO mysuer;
GRANT ALL ON FUNCTION get_transaction_all_property(varchar,timestamp,int8) TO mysuer;

这是来自 SSRS 的函数调用:

select * from get_transaction_fund_totals_year_recon_sf_new(?,?)  as ("property" numeric, "initial" numeric, "end" numeric)

SSRS 参数表达式:

=Join(Parameters!pty.Value,",")
=Join(Parameters!dat.Value,",")

请任何人指导我这样做。

提前致谢

PL/pgSQL 构造 SELECT ... INTO 将静默丢弃除第一个结果行之外的所有行。

而不是这样做:

SELECT INTO l_num_property, l_num_strtamt, l_num_endamt ...;
SELECT INTO result l_num_property, l_num_strtamt, l_num_endamt;
RETURN next result;

这样做:

RETURN QUERY SELECT ...;