如何使用SDO_GEOM.SDO_CLOSEST_POINTS作为Oracle Spatial的查询

时间:2014-02-18 16:59:18

标签: sql oracle-spatial

我试图将SDO_GEOM.SDO_CLOSEST_POINTS纯粹用作sql查询。所有示例都将它与pl / sql结合使用。是否可以在没有pl / sql的查询中使用它,是否有人可以提供如何执行此操作的语法示例?

我的具体任务是尝试在最接近点的线上返回顶点。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objgeom.htm#SPATL1113

谢谢。

1 个答案:

答案 0 :(得分:1)

无法从SQL查询中调用PL / SQL过程。

我建议您创建一个Oracle对象类型,它包装来自OUT的{​​{1}}参数,然后定义您自己的PL / SQL函数,该函数调用返回对象类型实例的过程。

这样的事情:

SDO_GEOM.SDO_CLOSEST_POINTS

然后,您应该能够从CREATE TYPE closest_points_type AS OBJECT ( dist NUMBER , geoma mdsys.sdo_geometry , geomb mdsys.sdo_geometry ) / CREATE FUNCTION sdo_closest_points_sql ( p_geom1 IN sdo_geometry , p_geom2 IN sdo_geometry , p_tolerance IN NUMBER , p_unit IN VARCHAR2 ) RETURN closest_points_type IS l_dist NUMBER; l_geoma mdsys.sdo_geometry; l_geomb mdsys.sdo_geometry; BEGIN sdo_geom.sdo_closest_points( geom1 => p_geom1 , geom2 => p_geom2 , tolerance => p_tolerance , unit => p_unit , dist => l_dist , geoma => l_geoma , geomb => l_geomb ); RETURN closest_points_type(l_dist, l_geoma, l_geomb); END sdo_closest_points_sql; / 语句调用此函数,并查询生成的对象,如下所示:

SELECT