我编写了以下函数:
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函数,以便它能提供所有记录,而无需重复?
谢谢!