SQL将新几何图形插入到新表中,该表使用交点和差值的空间函数进行计算

SQL将新几何图形插入到新表中,该表使用交点和差值的空间函数进行计算,sql,function,stored-procedures,spatial,oracle-spatial,Sql,Function,Stored Procedures,Spatial,Oracle Spatial,我尝试使用两个游标来查找两个不同的交点,然后使用这两个交点来查找它们之间的差异,作为要插入到新表中的几何体对象。我不确定我是否正确使用了这些游标,但我希望以最有效的方式来完成 CREATE OR REPLACE PROCEDURE outputint is CURSOR findint1 IS select sdo_geom.sdo_intersection (a.geometry, b.geom, 0.05) from OTTAWACOLLECTOR_NAD a, OT

我尝试使用两个游标来查找两个不同的交点,然后使用这两个交点来查找它们之间的差异,作为要插入到新表中的几何体对象。我不确定我是否正确使用了这些游标,但我希望以最有效的方式来完成

CREATE OR REPLACE PROCEDURE outputint
is
CURSOR findint1 IS
select sdo_geom.sdo_intersection 
    (a.geometry, b.geom, 0.05)
from  OTTAWACOLLECTOR_NAD a,
      OTTAWAPROVRDS_LRS b      
where a.road_name = 'KENT' 
AND b.rdnumber = '417';

CURSOR findint2 IS
select sdo_geom.sdo_intersection 
    (a.geometry, b.geom, 0.05)
from  OTTAWACOLLECTOR_NAD a,
      OTTAWAPROVRDS_LRS b      
where a.road_name = 'METCALFE' 
AND b.rdnumber = '417';

begin

UPDATE closedrds 
set GEOMETRY = SDO_GEOM.SDO_DIFFERENCE(
    findint1, findint2)
where rd_id = 1;

end outputint;

这种语法绝对不正确。您不能以这种方式使用游标。SDO_GEOM中的函数是接受标量输入并生成标量结果的标准函数。换句话说,SDO_GEOM.SDO_DIFFERENCE()将两个几何体对象作为输入,并返回单个几何体对象(两个输入对象的几何体差)。它不接受光标作为输入

再说一遍,你到底想做什么?我假设这两个表(OTTAWACOLLECTOR_NAD和OttaweProvards_LRS)都是直线(第二个表包含LRS几何图形)。你期望从交叉中得到什么?线?积分?你对计算这些结果之间的差异有什么期望


另一方面,为数据模型添加一些一致性是一个好主意。例如:对几何体列使用相同的名称(几何体与几何体)。更重要的是:对同一域中的属性使用相同的名称,即表示相同信息的属性:RD_ID vs RDNUMBER-假设是这样。

我的目标是让每个光标返回一个几何体对象,该对象将作为Difference()函数的输入。我应该改为使用函数吗?每个交点返回一个点,差分将返回一个字符串。我知道您希望使用光标并操纵几何图形。但是要实现什么呢?您试图解决的实际业务问题是什么?实现这一点可能有直截了当的方法。两点之间的差异永远不会形成一条直线。您的行表中似乎有一行包含LRS行(Ottawaprovards_LRS)。您是否真的试图在两个十字路口之间的道路上切割一条线,即进行动态分割?