0

我想在连接的文本输出中输出以下 plpgsql 函数的结果。

我该怎么做?我想要类似的东西:

output = output + 'new point';

到目前为止我的功能:

DECLARE 
    descriptions text[];
    i text;
    counter int := 1;
    _r record;
    output text;

BEGIN

    descriptions = string_to_array(description, ',');

    FOREACH i IN ARRAY descriptions

    LOOP

        FOR _r IN EXECUTE 'select point_id as id, name_of_location as name, description as desc
                   from information_on_point_of_interest
                   where description = '''||descriptions[counter]||''''

        LOOP
            output := output + _r.id || ',' || _r.name || ',' || _r.desc || '|';

        END LOOP;

    END LOOP;

RETURN output;

END;

output := output + new point好像不支持?

4

2 回答 2

2

为什么?

您的功能失败,因为您没有初始化output. 它从NULL停留开始,NULL因为NULL || anything结果......NULL

您还应该使用concat_ws()carNULL获取连接列中的任何值。

适当的解决方案

使用这个简单的 SQL 查询可以更快(更正确)地完成您想要实现的目标:

SELECT string_agg(concat_ws(',', point_id, name_of_location, description), '|')
FROM  (SELECT unnest(string_to_array(description_list, ',')) AS description) x
JOIN   information_on_point_of_interest USING (description);

我将您的描述列表重命名为description_list以减少混乱。
在手册中阅读这些功能:

于 2013-03-17T13:23:39.250 回答
1

concat 运算符是||SQL 标准。

您的问题是没有初始化该变量,所以您正在做的是null || text并且将 null 与任何内容连接的结果为 null。你必须像这样初始化它:

DECLARE 
    output text:='';

http://sqlfiddle.com/#!12/9e854/1

于 2013-03-17T13:06:52.417 回答