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 :

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 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
    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;
Je sais qu'une solution aurait été de faire du SQL dynamique mais on m'a demandé d'essayer d'en trouver une autre.

Une autre alternative aurait été d'ouvrir tout les curseurs et de tester l'option dans la boucle, comme suit:

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;
Mais cette solution ne me plaît pas trop.

C'est pourquoi je fais appel à votre aide en espérant avoir été assez clair.