Ver Mensaje Individual
  #12 (permalink)  
Antiguo 23/03/2011, 02:22
mmanso
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: pl/sql oracle

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,