Мне нужно иметь дело с тремя таблицами с геометриями.Несколько курсоров в одном заявлении
DECLARE
CURSOR c1 IS
SELECT
store_number,
0 AS total_area,
0 AS bg_id,
0 AS store_geom
FROM table1 WHERE client_id = 1 AND org_id = 1;
TYPE c1_tab_type IS TABLE OF c1%ROWTYPE;
c1_list c1_tab_type;
BEGIN
FOR r1 IN c1
LOOP
SELECT bg_id, store_number, total_area
BULK COLLECT INTO c1_list
FROM (
SELECT
bg_id,
store_number,
b.geometry store_geom,
((sdo_geom.SDO_AREA(sdo_geom.SDO_INTERSECTION(a.geometry, b.geometry, 0.005), 0.005, 'unit=sq_mile')/
sdo_geom.SDO_AREA((a.geometry), 0.005, 'unit=sq_mile')) * 100) total_area
FROM table2 a, table1 b
WHERE store_number != r1.store_number
AND sdo_relate(a.geometry, b.geometry, 'mask=anyinteract') = 'TRUE');
IF total_area = 100 THEN
FOR i IN 1..c1_list.count LOOP
INSERT INTO temp_prop_area_100 VALUES c1_list(i);
END LOOP;
ELSE IF
FOR i IN 1..c1_list.count LOOP
INSERT INTO temp_Prop_area_block VALUES c1_list(i);
END LOOP;
END IF;
END LOOP;
END;
Так что выбрать запись (самую большую геометрию всех три таблиц) из таблицы 1 и наложения более мелкие полигоны из таблицы 2. я получаю список перекрывающихся геометрии из таблицы 2. Это может иметь несколько из них пересекаются, а некоторые из них полностью находятся под полигоном из таблицы 1.
Затем я хочу разместить их в двух разных таблицах. Те, которые полностью находятся в temp_prop_area и те, которые пересекаются в temp_prop_area_block.
Теперь проблема заключается в том, что когда я получаю идентификатор для всех пересекающихся полигонов (temp_prop_area_block), я хочу наложить каждый из этого многоугольника на многоугольники из таблицы 3, в области меньших полигонов. И аналогичным образом выясните, какие полигоны они интуитивно понятны и какова область пересечения.
Размер многоугольника в этом порядке полигонах из таблицы 1, как самые большие, то из таблицы 2 или temp_prop_area_block и затем многоугольников из таблицы 3.