PL / pgSQL查询 - 循环表问题

时间:2013-02-22 14:28:15

标签: sql postgresql concatenation plpgsql

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

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

2 个答案:

答案 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,因为这是您命名结果的。