[Oracle] Curseurs imbriqués -> deadloop :(

Curseurs imbriqués -> deadloop :( [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 16-05-2003 à 00:59:47    

Ben oui, en gros je dois afficher des objets (enfin, plusieurs champs par objet, hein...), et pour chacun, leurs propriétés, genre :
 
objet1
   propriétés de l'objet1
objet2
   propriétés de l'objet2
objet3
   propriétés de l'objet3
...
 
J'ai pondu ça, mais la 1ere boucle est infinie !:( (Heu, je mets pas mon code, juste le concept de mon truc, je voudrais savoir si le principe est bon ou si c'est tout nul :D)
 

Code :
  1. DECLARE cursor1 CURSOR FOR...
  2. OPEN cursor1...
  3. FETCH cursor1...
  4. while(sqlca.sqlcode != 100)
  5. {
  6.    print... // prints the objects  
  7.    FETCH cursor1...
  8.    DECLARE cursor2 CURSOR FOR...
  9.    OPEN cursor2...
  10.    FETCH cursor2...
  11.    while(sqlca.sqlcode != 100)
  12.    {
  13.       print... // prints the properties
  14.       FETCH cursor2...
  15.    }
  16.    CLOSE cursor2;
  17. }
  18. CLOSE cursor1;


 
:hello::hello::hello:
 
 
[Oracle] Curseurs imbriqués -> deadloop :(

Reply

Marsh Posté le 16-05-2003 à 00:59:47   

Reply

Marsh Posté le 16-05-2003 à 12:46:39    

Deja tu déclare a chaque boucle ton cursor2. Défini le une fois au début avec des paramètres.


---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 16-05-2003 à 12:52:40    

Code :
  1. DECLARE
  2. CURSOR cursor1 IS...
  3. CURSOR cursor2 (param1%TYPE,param2%TYPE...) IS..
  4. r_cursor1 cursor1%ROWTYPE;
  5. r_cursor1 cursor2%ROWTYPE;
  6. BEGIN
  7.   FOR r_cursor1 IN cursor1
  8.   LOOP
  9.    {
  10.        print... // prints the objects   
  11.      
  12.        FOR r_cursor2 IN cursor2(r_cursor1.param1,r_cursor1.param2...)
  13.         {
  14.             print... // prints the properties
  15.         }
  16.        END LOOP;
  17.    }
  18.   END LOOP;
  19. END;


---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 16-05-2003 à 14:36:53    

Neeks a écrit :

Ben oui, en gros je dois afficher des objets (enfin, plusieurs champs par objet, hein...), et pour chacun, leurs propriétés, genre :
 
objet1
   propriétés de l'objet1
objet2
   propriétés de l'objet2
objet3
   propriétés de l'objet3
...
 
J'ai pondu ça, mais la 1ere boucle est infinie !:( (Heu, je mets pas mon code, juste le concept de mon truc, je voudrais savoir si le principe est bon ou si c'est tout nul :D)
 

Code :
  1. DECLARE cursor1 CURSOR FOR...
  2. OPEN cursor1...
  3. FETCH cursor1...
  4. while(sqlca.sqlcode != 100)
  5. {
  6.    print... // prints the objects  
  7.    FETCH cursor1...
  8.    DECLARE cursor2 CURSOR FOR...
  9.    OPEN cursor2...
  10.    FETCH cursor2...
  11.    while(sqlca.sqlcode != 100)
  12.    {
  13.       print... // prints the properties
  14.       FETCH cursor2...
  15.    }
  16.    CLOSE cursor2;
  17. }
  18. CLOSE cursor1;


 
:hello::hello::hello:
 
 
[Oracle] Curseurs imbriqués -> deadloop :(


Tiens , c'est du PB ça !
La première chose qui ne va pas, c'est ton while sqlca.sqlcode != 100, car s'il y a un problème dans ta requete, il te retourne direct -1 ... et ensuite il ne prendra jamais la valeur 100 !


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 18-05-2003 à 02:09:58    

thecoin > oui je le déclare à chaque fois, car la requête associée change...à chaque fois. J'avais peur que la requête soit "statique" en fait :heink:.
 
Bon, en fait j'a fait autrement : une fonction avec une boucle for, qui remplace le 1er curseur, et qui appelle une 2e fonction, dont le curseur n'est plus immbriqué...

Reply

Marsh Posté le 19-05-2003 à 08:43:51    

Neeks a écrit :

thecoin > oui je le déclare à chaque fois, car la requête associée change...à chaque fois. J'avais peur que la requête soit "statique" en fait :heink:.
 
Bon, en fait j'a fait autrement : une fonction avec une boucle for, qui remplace le 1er curseur, et qui appelle une 2e fonction, dont le curseur n'est plus immbriqué...


 
Dans se cas la utilise des paramètres


---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 19-05-2003 à 08:45:17    

on s'en fout, le projet est rendu [:alphat]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed