我试图将SDO_GEOM.SDO_CLOSEST_POINTS纯粹用作一个sql查询。所有示例都将它与pl/sql结合使用。在没有pl/sql的查询中可以使用它吗?谁能提供一个如何这样做的语法示例?
我的具体任务是试图返回最接近点的直线上的顶点。
objgeom.htm#SPATL1113
谢谢。
发布于 2014-02-18 23:27:06
不可能从SQL查询调用PL/SQL过程。
我建议您创建一个object类型,它封装来自SDO_GEOM.SDO_CLOSEST_POINTS的SDO_GEOM.SDO_CLOSEST_POINTS参数,然后定义自己的PL/SQL函数,该函数调用返回对象类型实例的过程。
就像这样:
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语句调用这个函数,并询问结果对象,如下所示:
WITH q1 AS (
SELECT
sdo_closest_points_sql(
mdsys.sdo_geometry(2002, NULL, NULL, sdo_elem_info_array(1,2,1), sdo_ordinate_array(1,1, 1,10, 1,20))
, mdsys.sdo_geometry(2002, NULL, NULL, sdo_elem_info_array(1,2,1), sdo_ordinate_array(2,5, 2,15, 2,25))
, 0.05
, NULL
) result
FROM dual
)
SELECT
(q1.result).dist dist
, (q1.result).geoma geoma
, (q1.result).geomb geomb
FROM q1https://stackoverflow.com/questions/21860406
复制相似问题