-1

我在 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;

关于如何以最简单的方式实现这一目标的任何建议?

4

2 回答 2

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)
于 2013-02-22T15:35:11.463 回答
0

另外,这不会point = point || '|' || test;不断覆盖point吗?

应该是point := point || '|' || test;吗?

此外,_r被声明为记录,因此必须设置 test _r.a,因为这就是您命名的结果。

于 2013-03-12T15:08:33.873 回答