【发布时间】:2016-06-20 09:02:53
【问题描述】:
我想使用 plpgsql 计算地址点到 50 米范围内所有街道的距离。我尝试了以下功能:
Create or Replace Function get_dist(ad geometry, st geometry)
Returns double precision AS
$$
Begin
Insert into street(Distance)
Select ST_Distance(ad.geom, st.geom) from ad
Left Join st ON ST_DWithin(ad.geom, st.geom, 50.0);
Return ST_Distance(ad.geom, st.geom);
End
$$
Language plpgsql volatile;
创建函数没有错误,但是当我尝试使用此命令调用它时:
Select get_dist(ad.geom, st.geom) from ad
Left Join st ON st.gid = ad.gid;
我收到此错误:
ERROR: missing FROM-clause entry for table "ad" LINE 1: SELECT ST_Distance(ad.geom, st.geom)
有人可以突出显示函数的问题(创建函数并调用它)吗?
【问题讨论】:
-
传递整个记录 - ad / st, or geometry... 在函数中 - 如果 ad/st 是几何 - 然后重写内部选择...
-
如何执行这个函数而不出错?您的数据库中是否有表
ad和st(因为您正在从中选择)?请更详细地描述您要完成的工作。
标签: postgresql sql-insert plpgsql set-returning-functions sql-returning