我试图将SDO_GEOM.SDO_CLOSEST_POINTS纯粹用作sql查询。所有示例都将它与pl / sql结合使用。是否可以在没有pl / sql的查询中使用它,是否有人可以提供如何执行此操作的语法示例?
我的具体任务是尝试在最接近点的线上返回顶点。
http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objgeom.htm#SPATL1113
谢谢。
答案 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