Bonjour!
Dans une procédure j'ai quatre curseurs différents, chacun correspondant à la valeur d'une option. Chacun de ces curseur renvoie plusieurs enregistrements, il faut donc que j'utilise une boucle.
Mon problème, c'est que le traitement effectué dans cette boucle est assez lourd et comme c'est le même pour chaque curseur je n'ai pas envi de faire quelque chose comme ça :
Je me demandais donc s'il était possible de créer un curseur général qui "récupérerait" le SELECT d'un autre curseur. Cela donnerait quelque chose comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 IF w_option =1 THEN FOR w_c1 IN c1 LOOP ... END LOOP; ELSIF w_option =2 THEN FOR w_c2 IN c2 LOOP ... END LOOP; ELSIF ...
Je sais qu'une solution aurait été de faire du SQL dynamique mais on m'a demandé d'essayer d'en trouver une autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 IF w_option =1 THEN OPEN c1 IN CURSOR c_general; ELSIF w_option =2 THEN OPEN c2 IN CURSOR c_general; ELSIF ... ... FOR w_general IN c_general LOOP ... END LOOP;
Une autre alternative aurait été d'ouvrir tout les curseurs et de tester l'option dans la boucle, comme suit:
Mais cette solution ne me plaît pas trop.
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 OPEN c1; OPEN c2; OPEN c3; OPEN c4; LOOP IF w_option =1 THEN FETCH c1 IN w_c1; ELSIF w_option =2 THEN FETCH c2 IN w_c2; ELSIF ... END LOOP; CLOSE c1; CLOSE c2; CLOSE c3; CLOSE c4;
C'est pourquoi je fais appel à votre aide en espérant avoir été assez clair.
Partager