[PL/SQL] Pb avec l'appel d'un curseur paramétré
Bonjour,
j'appelle un curseur qui contient un paramètre d'entrée.
Déclaration du curseur:
Code:
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:
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:
Citation:
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.