2016-03-20 23 views
1

我正在尝试在两种几何数据类型,例如多点和多行字符串的PL \ pgSQL过程语言中创建一个函数。我想选择所有点在30米范围内的所有线。以下是我所尝试的:在PL pgSQL函数中使用几何?

Create OR Replace Function get_streets(bar.geom geometry foo.geom geometry) 
Returns geometry AS $$ 
BEGIN 
    IF ST_DWithin(bar.geom, foo.geom, 30.0) Then 
    Return foo.geom; 
    ELSE 
    Return null; 
    END IF 
    Return foo.geom; 
END; 
$$ Language plpgsql; 

该函数由于几何数据类型而返回错误。任何关于在plpgsql函数中使用/处理几何数据的建议?

回答

4

你的函数中有很多小的语法错误。请参阅下面的版本进行工作功能:

CREATE FUNCTION get_streets(g1 geometry, g2 geometry) RETURNS geometry AS $$ 
BEGIN 
    IF ST_DWithin(g1, g2, 30.0) THEN 
    RETURN g2; 
    END IF; 
    RETURN NULL; 
END; 
$$ LANGUAGE plpgsql; 

更重要的是:不使用table.field符号的参数。相反,使用一个简单的名称,当你调用该函数使用适当的领域:

SELECT get_streets(bar.geom, foo.geom) 
FROM bar 
JOIN foo on ... 

顺便说一句,您可以在不使用的功能都得到了相同的功能:

SELECT foo.geom 
FROM foo 
JOIN bar ON ST_DWithin(bar.geom, foo.geom, 30) 
WHERE <other conditions>; 
+0

非常感谢。我根据你的建议更正了语法,它工作正常!是的,我知道直接查询的替代方法。不过,我更感兴趣的是按照“plpgsql”的方式来做。感谢您的替代方法。 –