【问题标题】:PostgreSQL error: RETURN NEXT cannot have a parameter in function with OUT parametersPostgreSQL 错误:RETURN NEXT 不能在具有 OUT 参数的函数中有参数
【发布时间】:2013-12-09 10:25:47
【问题描述】:

我在 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; 

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    当你使用一个表函数——声明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;
    

    【讨论】:

    • 非常感谢您的回答。我对 DBMS 和 Postgresql 都很陌生。我有一种感觉,我在上面的功能上走错了路。其实我的任务是找到远点。我有非常小的数据库,发生了 6 点。我应该使用一个函数来找到具有最大距离的点对。您建议我遵循哪种方式?我已经检查了这里的问题。有几个建议,例如 conex hull、ST_MaxDistance 等等。
    • @jugoslaviaa 我无法帮助解决 PostGIS 问题 - 抱歉。
    猜你喜欢
    • 2012-12-11
    • 2019-11-06
    • 2018-01-25
    • 1970-01-01
    • 2013-09-26
    • 2012-03-11
    • 2018-05-11
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多