Bonjour,

j'appelle un curseur qui contient un paramètre d'entrée.

Déclaration du curseur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CURSOR c_otf(pi_otf_code IN DT_ORDRE_TRANSPORT_FOUR.otf_code%TYPE) IS
        SELECT otf_code
        FROM DT_ORDRE_TRANSPORT_FOUR
        WHERE otf_code=pi_otf_code;
w_c_otf  c_otf%ROWTYPE;
pi_otf   DT_ORDRE_TRANSPORT_FOUR.otf_code%TYPE;
Ce curseur est appelé dans une boucle qui fait varié le paramètre d'entrée. Ainsi, à chaque cycle, le curseur doit renvoyer une ligne différente.

Appel du curseur:
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
 
FOR w_c_wvf IN c_wvf LOOP
EXIT WHEN c_wvf%NOTFOUND;
 
           pi_otf := w_c_wvf.wvf_fou_transit||w_c_wvf.wvf_code;
 
           OPEN c_otf(pi_otf);
           FETCH c_otf INTO w_c_otf;
 
               DBMS_OUTPUT.PUT_LINE(w_c_otf.otf_code||'   '||pi_otf);
 
               IF c_otf%NOTFOUND THEN                        
                        INSERT INTO ... (...)
                        VALUES (...);
               END IF;
 
           CLOSE c_otf;
 
END LOOP;
Cependant cela ne fonctionne pas. A l'aide du DBMS_OUTPUT j'observe ceci:

9293 9293
9293 1111
La première ligne est normale, la sortie du curseur correspond au paramètre d'entrée (voir clause WHERE dans la déclaration) mais dans la deuxième ligne on voit que le curseur renvoie un mauvais résultat. C'est comme s'il avait gardé le résultat précédent.

Est-ce que quelqu'un aurait une solution ?

PS: la fermeture du curseur est gérée dans les exceptions.