PL / pgSQL函数 - 循环遍历特定列并在循环中执行第二个查询

时间:2014-03-09 14:16:13

标签: postgresql for-loop plpgsql

正如您在标题中看到的,我想循环遍历包含构建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”变量应声明为“整数”?
  • 我的第二个查询也应该在循环中使用?

提前致谢...

1 个答案:

答案 0 :(得分:3)

对于像这样的琐碎任务,请使用simple SQL function代替:

CREATE OR REPLACE FUNCTION get_buildings()
  RETURNS SETOF building AS
'SELECT * FROM building' LANGUAGE sql;

或者只是:

SELECT * FROM building;

以下是填充plpgsql中单个列的实际FOR loop的一个示例:
Returning results from a function in 'select statement' format

匿名记录的另一个例子:
Loop on tables with PL/pgSQL in Postgres 9.0+

Try a search.还有更多。