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 :

Problème pour remplir un curseur


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut Problème pour remplir un curseur
    Bonjour,

    J'ai un souci avec un curseur. Je ne récupère que la dernière ligne de la requête que j'exécute ! Voici un exemple de code pour mieux comprendre:

    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
    CURSOR  cur_ma_table IS 
    SELECT     * 
    FROM        ma_table
    WHERE      champ_1    =     val_1
    ORDER BY  champ_1, champ_2;
    ...
    FOR cur IN cur_ma_table
    LOOP
          ...
          un traitement spécifique (pour formater champ_1 et champ_2)
          ...
          OPEN resulat FOR
               SELECT cur.champ_1, cur.champ_2
               FROM    DUAL;
    END LOOP;
    ...
    Tout se déroule bien, mais quand j'ouvre mon curseur "resultat", je ne trouve qu'une seule ligne (la dernière) alors que la requête ci-dessus retourne 4 lignes !!

    Y a t-il un moyen pour ne pas écraser les autres lignes et bien remplir mon curseur "resulat" ?
    Pour information, je dois utiliser la boucle FOR car mon "traitement spécifique" fait appel à des fonctions d'autres packages !

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    je ne comprend pas le but de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      OPEN resulat FOR
               SELECT cur.champ_1, cur.champ_2
               FROM    DUAL;

  3. #3
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Bonjour,

    Le but de ce code est de remplir un curseur "resultat" qui sera parmi les paramètres de sortie de ma fonction. Ce curseur pourra contenir plusieurs lignes.

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Pour résumer mon problème en une phrase, je dirais qu'en parcourant un curseur, je voudrais remplir un autre curseur !

    Ceci est-il possible ?

    Merci d'avance.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    a mon avis tu devrais plutot regarder du
    coté des collections (tableau memoire)
    pour stocké le resultat apres traitement de ton curseur

  6. #6
    Membre confirmé
    Homme Profil pro
    Expert Oracle
    Inscrit en
    Mai 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Expert Oracle

    Informations forums :
    Inscription : Mai 2009
    Messages : 92
    Par défaut
    Merci pour l'aide langlet !

    Finalement j'ai opté pour les "GLOBAL TEMPORARY TABLE", je stocke mes données dans une table de ce type puis à la fin du LOOP je remplis mon deuxième curseur, et ça marche !!

    Pour info, cette table est purgée après chaque COMMIT, grâce à la commande "ON COMMIT DELETE ROWS".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE GLOBAL TEMPORARY TABLE ma_table_temp
    (
        champ_1           CHAR(40),
        champ_2           NUMBER(4,0),
        etc..........
    )
    ON COMMIT DELETE ROWS
    /

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/05/2007, 11h48
  2. [VBA-E] Problème pour remplir une listbox multicolonne
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2007, 16h55
  3. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. [MFC] Problèmes pour remplir unecombobox
    Par tealc5 dans le forum MFC
    Réponses: 7
    Dernier message: 01/01/2006, 17h35

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