Bonjour tout le monde,
Je ne connais pas du tout PL/SQL (enfin jusqu'à hier).
J'ai un truc à implémenter rapidement (comme d'hab), je plonge donc dedans....
Je dois appeler une procédure stockée située sur une autre base. Cette procédure me retourne un ref cursor (ne sautez pas au plafond si j'emploie des termes de manière inappropriée, le PL/SQL et Oracle c'est tout nouveau pour moi !!)
Donc je crée un dblink pour accéder à l'autre base, j'écris une petite procédure qui fait appel à la procédure distante, et bam je me prend une erreur 01001 "curseur non valide" dans la tête. Généralement j'ai vu que cette erreur est due à un curseur fermé - hors dans mon cas le curseur a déjà été ouvert dans la procédure distante.
Voici mon code :
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 create or replace PROCEDURE testMe AS TYPE RET_CURSOR IS REF CURSOR; codeRetour INTEGER; curMedecins RET_CURSOR; curr_NOM CHAR(25) := NULL; BEGIN pkdistant.procDistante@DBLINK(codeRetour, curMedecins,'NOM'); loop fetch curMedecins into curr_NOM; exit when curMedecins%notfound; /* du traitement ici */ end loop; END;
Précisions :
- le troisième paramètre dans l'appel de la procédure distante permet de choisir les colonnes présentes dans le curseur de retour, dans mon cas seulement la colonne 'NOM' qui est déclarée dans le curseur en CHAR(25).
- la procédure compile sans problème, c'est à l'exécution que ça pète.
Et donc, la question : d'ou peut provenir mon erreur ? le DBLINK peut-il être mis en cause ? j'ai bien fait attention à déclarer un DBLINK public. Là franchement je nage...
Toute aide serait la bienvenue.
Merci d'avance,
Mathieu.
Partager