Bonjour à toutes et à tous !
Via un programme C#, j'exécute une requête spatial sur Oracle qui ne renvoit qu'un seule enregistrement (ou 0) puisque elle utilise la fonction SDO_NN.
Cette requête à pour but, à partir de la longitude/latitude d'un point GPS, de trouver la rue la plus proche dans un rayon de 20 mètres :
La requete est comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
select 
CLETRONC, LONGUEUR 
from RUES 
where SDO_NN(
   GEOM, 
   MDSYS.SDO_GEOMETRY(
      2001, 
      41014, 
      MDSYS.SDO_POINT_TYPE(
          :latitude, 
          :longitude, 
          null), 
      null, 
      null), 
   'SDO_NUM_RES = 1') = 'TRUE' 
and SDO_GEOM.SDO_DISTANCE(
   GEOM, 
   MDSYS.SDO_GEOMETRY(
      2001, 
      41014, 
         MDSYS.SDO_POINT_TYPE(
         :latitude2, 
         :longitude2, 
         null), 
      null, 
      null), 
   0.001) < 20
La requête est paramétrée et donc j'initialise tous les paramètres (en fait les latitude/longitude des points). Elle est exécuté en boucle (en fait pour chaque point GPS - environ 11000) et il arrive un moment ou elle lève une exception : ORA-01000: maximum open cursors exceeded
Il me semble que le nombre de curseurs peut être dépassé quand on a une infinité de résultats... la j'en ai 0 ou 1... Oracle n'a pas l'air de les fermer puisque, c'est le fait de tourner en boucle qui fait ça ! Je ne comprends pas trop car j'utilise cette requête depuis un bon bout de temps et c'est la première fois que je rencontre ce soucis !
Si vous avez une idée ou une suggestion... Merci
@+
Antoine