PL/pgSQL 函数 - 遍历特定列并在循环中执行第二个查询
Posted
技术标签:
【中文标题】PL/pgSQL 函数 - 遍历特定列并在循环中执行第二个查询【英文标题】:PL/pgSQL functions - loop through specific column and execute second query in loop 【发布时间】:2014-03-09 14:16:13 【问题描述】:正如您在标题中看到的,我想遍历保存建筑物 ID 的特定列,然后函数将执行第二个查询,该查询使用这些循环值并在 PostgreSQL 中显示查询结果。
请注意以下代码:
CREATE OR REPLACE FUNCTION getBID() RETURNS SETOF building AS
$BODY$
DECLARE
r building%ROWTYPE;
BEGIN
FOR r IN EXECUTE 'SELECT point_id FROM building'
LOOP
RETURN QUERY EXECUTE 'SELECT gid, nof, year
FROM building
WHERE point_id = ' || r;
END LOOP;
RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;
SELECT * FROM getBID();
我的建筑物 ID 是整数值。我想知道以下两个方面:
“r”变量应该声明为“整数”? 我的第二个查询也应该循环使用?提前谢谢...
【问题讨论】:
你的循环没有任何意义。两个查询都从同一个表返回数据,因此您可以简单地删除第一个。并且整个函数可以用单个return query select gid, nof, year from building
替换。不再需要缓慢而繁琐的光标
【参考方案1】:
对于这样的琐碎任务,请改用simple SQL function:
CREATE OR REPLACE FUNCTION get_buildings()
RETURNS SETOF building AS
'SELECT * FROM building' LANGUAGE sql;
或者只是:
SELECT * FROM building;
这是一个实际的 FOR
loop 填充 plpgsql 中的单个列的示例:Returning results from a function in 'select statement' format
另一个匿名记录示例:Loop on tables with PL/pgSQL in Postgres 9.0+
Try a search.还有很多。
【讨论】:
你能给我一些代表“for循环方法”的例子吗?其实我需要这个。据我所知,互联网上实际上有太多的例子,但这些例子基本上是通过类似“select * from table”的查询来循环的。我想了解如何循环通过类似“从表中选择列”的查询。例如,我的查询将检索包含构建唯一 ID 的列,并使用这些 ID 迭代另一个查询。我用python或java编程语言完成了这个,但是我想学习PL/pgSQL函数如何处理这种情况...... @seroman:我添加了指向您要求的示例的链接。请注意,大多数情况下,SQL 中基于集合的方法比循环快得多。有例外...以上是关于PL/pgSQL 函数 - 遍历特定列并在循环中执行第二个查询的主要内容,如果未能解决你的问题,请参考以下文章
PL/pgSQL“for循环”+选择基本示例(“hello world”)