我在PL / pgSQL中编写了以下函数,该函数应循环遍历表并收集存储在points
列中的每个现有行的值。现在,我的问题是我不太确定是否可以将所有这些字段值连接成一个character varying
数据类型对象。
目前我的函数包含以下代码(但它仍未按预期工作):
DECLARE
_r record;
point character varying;
test character varying;
BEGIN
FOR _r IN EXECUTE ' SELECT st_y(a.'|| quote_ident(column_name) || ') AS p1, st_x(a.'|| quote_ident(column_name) || ') AS p2
FROM ' || quote_ident (table_name) ||' AS a'
LOOP
test = _r;
point = point || '|' || test;
END LOOP;
RETURN point;
END;
有关如何以最简单的方式实现这一目标的任何建议吗?
答案 0 :(得分:1)
是的,您可以使用内置的string_agg()
功能。如果它只是那个SQL函数就足够了。
create or replace function r()
returns text as $$
select string_agg(s.*::text, ','::text)
from (
values (1, 2), (3, 4)
) s(a, b)
;
$$ language sql
select r();
r
-------------
(1,2),(3,4)
答案 1 :(得分:0)
此外,point = point || '|' || test;
不会经常覆盖point
吗?
应该是point := point || '|' || test;
吗?
此外,_r
被声明为记录,因此必须设置test _r.a
,因为这是您命名结果的。