-1

pointsPL/pgSQL で次の関数を作成しました。これは、テーブルをループし、既存の各行の列に格納されている値を収集することになっています。さて、私の問題は、これらすべてのフィールド値を単一の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 を set_r.aにする必要があります。これは、結果に名前を付けたものだからです。

于 2013-03-12T15:08:33.873 に答える