返回SETOF的函数文本返回第一项或全部的多个副本

时间:2018-08-02 21:13:02

标签: postgresql function loops

我编写了以下函数:

CREATE OR REPLACE FUNCTION someschm.get_something()
 RETURNS SETOF text
 LANGUAGE plpgsql
AS $function$ 
declare qry text;rec RECORD;tmp text;res text;
begin

qry = 'select blah blah blah';
raise info '%', qry;  
res='';
tmp='';
 FOR rec in

     SELECT t.f1, t.f2, string_agg(t.f3, ' ') f3
     FROM dblink('rs_link', qry) as t(f1 text, f2 text, f3 text)
     group by t.f1, t.f2

loop    
  tmp = substring(lower(regexp_replace(rec.f3,  E'[\\t]+', chr(10), 'g')) from 'create.*');
  tmp = replace(replace(replace(replace(tmp, 'xyz', ''), 'xxxxxx', ''), '"',''), 'abc', '');

return next tmp;
END LOOP;

end

 $function$

我已经证实它可以正常工作。

现在,当我从另一个函数调用它时,就像这样:

SELECT * FROM someschm.get_something()

但是,它仅返回第一条记录。

当我从循环中调用它时,就像这样:

FOR res IN
SELECT * FROM someschm.get_something()
LOOP
 raise info '%', res;
END LOOP;

它返回相同数据的多个副本。

如何调用我的main函数,以便它能提供所有记录,而无需重复?

谢谢!

0 个答案:

没有答案