1

我的 sql 语句是动态构建的。我有类似的东西

strSql := 'select name, tel, adress, activity_id as filtre_1, country_id as filtre_2, ... from ... where ...'

我可以有1到n个过滤器,filter_1可以是activity_id作为country_id,顺序不重要。

我如何检索 filter_1、filter_2 的值,因为我不知道有多少请求发回?

通常要检索值,我会:

FOR rowResult IN EXECUTE strSql LOOP
        name := rowResult.name
        tel := rowResult.tel
        adress := rowResult.adress
        filtre_1 := rowResult.filtre_1
        filtre_2 := rowResult.filtre_2
END LOOP;

由于无法做到这一点,我喜欢做类似的事情

FOR rowResult IN EXECUTE strSql LOOP
        name := rowResult.name
        tel := rowResult.tel
        adress := rowResult.adress
        filtre_1 := rowResult("filtre_1")
        filtre_2 := rowResult("filtre_2")
END LOOP;

rowResult(stringfield)不存在。

有人有想法吗?

谢谢

4

1 回答 1

1

可能有更有效的方法,但您可以通过将匿名记录转换为数组来访问字段:

strSql := 'select name, activity_id, country_id from test where activity_id = 2 and country_id = 1';
for rowResult in execute strSql loop
    temp := string_to_array(trim(rowResult::text, '()'), ',');
    activity_id := temp[2];
    country_id := temp[3];
end loop;

sql fiddle demo

我认为也可以使用hstore,但现在无法测试:

    temp := hstore(rowResult);
    activity_id := temp -> 'f2'
    country_id := temp -> 'f3'
于 2013-08-26T08:48:22.547 回答