Bonjour,

Je vais un appel à une procedure stocké via VB6. Cette procédure stocké renvoi un curseur de type Refcursor, tout ce passe bien lorsque je fais juste uniquement renvoyer à ma procédure stocké un curseur.

Par contre si dans la procédure stocké, j'utilise aussi ce curseur pour faire des mises à jour dans des tables cela plante et me sort l'erreur :
ORA-01002 fetch out of sequence
En revanche si je fais l'appel directement, depuis PL/SQL developper cela fonctionne correctement.

J'ai bien sur regarde l'explication du message mais je dois avoue ne pas tout comprendre mon anglais est vraiment pas terrible, décidement
ORA-01002 fetch out of sequence

Cause: In a host language program, a FETCH call was issued out of sequence. A successful parse-and-execute call must be issued before a fetch. This can occur if an attempt was made to FETCH from an active set after all records have been fetched. This may be caused by fetching from a SELECT FOR UPDATE cursor after a commit. A PL/SQL cursor loop implicitly does fetches and may also cause this error.

Action: Parse and execute a SQL statement before attempting to fetch the data.
Pour info voici comment j'ouvre mon curseur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
procedure maprocedure (CurCourrier OUT TCurCourrier)
open CurCourrier for
            str_requete;
 
 loop    
            Fetch CurCourrier into rec;
            Exit when CurCourrier%notfound;
           insert into t_historique(num_cli, num_aff, cod_cou, cod_tab, cod_evt, cod_usr,lib_imgavt,dat_hst)
                 values (rec.numcli, rec.numaff, v_cod_cou, 'CU', 'COK', user, v_lib_cou, to_char(sysdate, 'dd/mm/yyyy'));
        end loop;
        commit;
end maprocedure
J'ai vu que cela pouvais ce produire lorsque l'on faisant un SELECT ... FOR UPDATE, mais ce n'est pas mon cas.
J'espere que ce n'est pas un bug VB6.
Merci de votre aide.[/code]