-1

私は次のpgsqlプロシージャを書いています:

CREATE OR REPLACE FUNCTION KNN(gid_ integer)
RETURNS Text AS $body$
DECLARE
row_ RECORD;
BEGIN
    SELECT  g1.gid As SOURCE, g2.gid As Neighbors  FROM polygons as g1, polygons as   g2  WHERE g1.gid = $1 and g1.gid <> g2.gid  ORDER BY g1.gid, 
ST_Distance(g1.the_geom,g2.the_geom) limit 5;
END
$body$
LANGUAGE plpgsql;

クエリは、プロシージャに指定された引数の値ごとに 5 行を返します。これらの5行を返すにはどうすればよいですか。また、テーブル ポリゴンに列 gid として格納されている引数のすべての値に対して手順を実行するにはどうすればよいですか。誰か完全なコードを教えてください。ありがとうございます。

4

1 に答える 1

1

この構文を使用して、変数RETURNS TABLEを暗黙的に作成できます。OUT

CREATE OR REPLACE FUNCTION KNN(
    gid_ integer
) RETURNS TABLE (
    source  integer,
    neighbor integer
) LANGUAGE SQL AS $$
    SELECT g1.gid As SOURCE
         , g2.gid As Neighbors
      FROM polygons AS g1,
           polygons AS g2
     WHERE g1.gid = $1
       AND g1.gid <> g2.gid
     ORDER BY g1.gid
         , ST_Distance(g1.the_geom,g2.the_geom)
     LIMIT 5;
$$;

これを使用するには、を使用すると、SELECT * FROM KNN(42)最大5つの2列の行に戻ります。

于 2012-05-06T06:45:21.710 に答える