动态检索记录的列

时间:2013-08-26 07:53:46

标签: postgresql

我的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的值,因为我不知道请求发回了多少?

Normaly检索值,我这样做:

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)不存在。

有人有想法吗?

由于

1 个答案:

答案 0 :(得分: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'