2012-05-06 14 views
-1

我寫一個folloing pgSQL的過程:PostgreSQL的過程

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行對提供給程序arrgument的每個值。我怎樣才能返回這5行。另外,我怎麼能執行存儲在一個表格多邊形作爲列gid的參數的所有值的過程。請有人提供完整的代碼。感謝你。

回答

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),你會得到備份到五兩列行。

+0

好的,另外,我必須執行這個函數爲表格中的每個列gid的值。我想我必須使用光標。我怎樣才能做到這一點 ?你可以爲我做這個。謝謝您的幫助。 –

+0

請幫忙,我怎樣才能調用上述函數爲不同的參數值存儲爲表格多邊形中的gid列。 –

+0

我不明白你的問題。 – theory