我在PostgreSQL 9.2中有一个plpgsql函数,它返回一个表。我试图找到我在数据库中的点对之间的距离。但是我在这个问题的标题中遇到了错误。
我想做这样的事情:
CREATE OR REPLACE FUNCTION max_dis(which_tab text)
RETURNS TABLE(P1 geometry, P2 geometry, dis double precision) as
$$
DECLARE
my_row RECORD;
my_row2 RECORD;
BEGIN
FOR my_row IN EXECUTE ('SELECT * FROM '||which_tab) LOOP
--
FOR my_row2 IN EXECUTE ('SELECT * FROM '||which_tab) LOOP
SELECT ST_DISTANCE(my_row.the_geom, my_row2.the_geom)
INTO dis;
RETURN NEXT my_row,my_row2;
END LOOP;
END LOOP;
RETURN;
END ;
$$
LANGUAGE plpgsql VOLATILE STRICT;
答案 0 :(得分:4)
当您使用表函数时 - 使用声明RETURNS TABLE(),则输出表的任何列都有一个隐式变量。在这种情况下,RETURN NEXT不带参数,因为返回值是由参数'变量的内容组成的。
CREATE OR REPLACE FUNCTION xx()
RETURNS TABLE(a int, b int) AS $$
BEGIN
a := 1;
b := 2;
RETURN NEXT;
b := 3;
RETURN NEXT;
RETURN;
END;
$$ LANGUAGE plpgsql;
但是你可以通过RETURN QUERY语句增强你的功能
BEGIN
RETURN QUERY EXECUTE format('SELECT t1.the_geom, t2.the_geom,
ST_DISTANCE(t1.the_geom, t2.geom)
FROM %I t1, %I t2', which_tab, which_tab);
RETURN;
END;