我的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)
不存在。
有人有想法吗?
由于
答案 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;
我认为也可以使用hstore,但现在无法测试:
temp := hstore(rowResult);
activity_id := temp -> 'f2'
country_id := temp -> 'f3'