gpt4 book ai didi

postgresql - 动态检索记录的列

转载 作者:行者123 更新时间:2023-11-29 13:33:32 24 4
gpt4 key购买 nike

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

strSql := '选择名称、电话、地址、activity_id 作为 filtre_1,country_id 作为 filtre_2,...从...那里...'

我可以有 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) 不存在。

有人有想法吗?

谢谢

最佳答案

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

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'

关于postgresql - 动态检索记录的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18439233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com