Hola, soy nuevo en el foro y tengo una pregunta.
Estoy diseñando un procedimiento PLSQL que trata una colencción extensa de registros mediante consultas espaciales (determinar distancias).
El procedimiento funciona pero llega un momento que la memoria que usa Oracle crece tanto que tumba la base de datos.
El procedimiento es el siguiente
CREATE OR REPLACE PROCEDURE checkproximity AS
CURSOR ThePoints IS SELECT geometry, row_kw FROM pointsLayer;
CURSOR TheDistance(ppos MDSYS.SDO_GEOMETRY)IS SELECT sdo_nn_distance(1) from lineLayer where sdo_nn(lineLayer.geometry, ppos , 'sdo_num_res=1 unit=Km', 1) = 'TRUE';
ppos mdsys.sdo_geometry;
therow int;
dist number;
BEGIN
dist :=0;
Open ThePoints;
Loop Fetch ThePoints INTO ppos, therow;
exit when ThePoints%NOTFOUND;
Open TheDistance(ppos);
Loop Fetch TheDistance INTO dist;
exit when TheDistance%NOTFOUND;
End LOOP;
Close TheDistance;
if dist < 1 then UPDATE pointLayer set NEAR = 'S' where row_kw=therow;
COMMIT;
End if;
COMMIT;
END LOOP;
Close ThePoints;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
NULL;
END checkproximity;
/
¿Alguien me puede dar una pista de porqué pasa esto?
Muchas gracias de antemano.
Un saludo,