Bonjour,
j'appelle un curseur qui contient un paramètre d'entrée.
Déclaration du curseur:
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.
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;
Appel du curseur:
Cependant cela ne fonctionne pas. A l'aide du DBMS_OUTPUT j'observe ceci:
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;
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.9293 9293
9293 1111
Est-ce que quelqu'un aurait une solution ?
PS: la fermeture du curseur est gérée dans les exceptions.
Partager