IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

les curseurs [Débutant(e)]


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 165
    Points
    165
    Par défaut les curseurs
    Bonjour à tous,

    étant débutant en PL SQL, je me heurte à un probleme avec les curseurs. J'ai ma fonction qui est de la forme suivante :
    FUNCTION GET_PROFILS(annee VARCHAR2, lang VARCHAR2)
    RETURN SYS_REFCURSOR
    IS

    l_cursor SYS_REFCURSOR;
    req VARCHAR2(32767);
    index_record t_dossier;
    begin
    req := ' select
    ...
    d.taux
    ....

    union

    select
    ...,
    d.taux,
    ... ';
    OPEN l_cursor FOR req;

    LOOP
    FETCH l_cursor INTO index_record;
    EXIT WHEN l_cursor%NOTFOUND;
    index_record.taux := ... (calcul du taux)
    END LOOP;

    END;
    Je souhaite faire un appel à cette fonction via JDBC et lorsque je récupère le curseur renvoyé par la fonction, mais j'obtiens une erreur : Curseur Ref non valide.

    D’après un collègue, le pointeur du curseur étant arrivé à la fin lors des fetch, il ne peut plus être parcouru en java, est ce vrai ?

    Si oui, cela veut il dire qu'on ne peut renvoyer un curseur qu on vient de parcourir ? Puisqu' apparemment, il n'existe pas de méthode pour reset un curseur.

    J'ai bien essayé de contourné le problème en faisant le calcul du taux directement dans le select, mais le client ne veux pas de cette méthode.

    Merci pour votre aide.

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour

    Je m'intéresse aux trois lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    index_record t_dossier;
    FETCH l_cursor INTO index_record;
    index_record.taux := ... (calcul du taux)
    Ce qui se passe : vous affectez le résultat d'une ligne dans la variable index_record et ensuite vous voulez lui affecter une autre valeur.

    Par essence, lorsque vous faites un fetch depuis un select la variable dans laquelle vous faites le fetch devrait être en lectre seule et donc vous ne devriez pas pouvoir lui affecter un résultat de calcul.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 165
    Points
    165
    Par défaut
    Aaaah, je ne savais pas. En fait, le type curseur porte bien son nom. Merci ojo pour ton aide ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/05/2007, 10h11
  2. Réponses: 2
    Dernier message: 06/12/2006, 09h09
  3. Firebird et les curseurs ?
    Par msuire dans le forum SQL
    Réponses: 5
    Dernier message: 10/06/2006, 13h01
  4. Problème avec les curseurs SQL SERVER
    Par stefostillrise dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2005, 13h09
  5. [C#] Pb avec les curseurs
    Par White_Angel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/01/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo