0

我正在尝试使用两个游标来查找 2 个不同的交点,然后使用这两个交点来查找它们之间的差异,并将其作为几何对象插入到新表中。我不确定我是否正确使用了这些游标,但我想以最有效的方式执行此操作。

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;
4

1 回答 1

0

该语法绝对不正确。你不能那样使用游标。SDO_GEOM 中的函数是接受标量输入并产生标量结果的标准函数。换句话说,SDO_GEOM.SDO_DIFFERENCE() 将两个几何对象作为输入并返回一个几何对象(两个输入对象的几何差异)。它不将光标作为输入。

再说一次,你到底想做什么?我假设两个表(OTTAWACOLLECTOR_NAD 和 OTTAWAPROVRDS_LRS)都是线(第二个包含 LRS 几何)。你对它们相交有什么期望?线条?积分?您对计算这些结果之间的差异有何期望?

顺便说一句,为您的数据模型添加一些一致性是个好主意。例如:为几何列使用相同的名称(GEOMETRY 与 GEOM)。更重要的是:对同一域中的属性使用相同的名称,即表示相同的信息:RD_ID 与 RDNUMBER - 假设是这种情况。

于 2015-06-23T07:47:56.943 回答