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 :

Collection de curseurs%rowtype


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut Collection de curseurs%rowtype
    Bonjour à tous,

    Ma problématique est la suivante:

    Je souhaite stocker les différentes lignes de mon curseur dans une collection (qui represente une file d'attente dans mon programme)

    Je souhaite manipuler cette collection toujours de la même façon en utilisant la methode "collection.last" qui me renvoie l'indice de la dernière "case" de ma collection afin de la remplir comme une pile.

    ----------------------------
    DECLARE

    CURSOR curs2(param IN CAPACITY_MAT_REQ.ARINVT_ID%TYPE) IS SELECT arinvt_id,qty,unit,kind FROM capacity_mat_req WHERE parent_arinvt_id=param;

    var2 curs2%rowtype;

    TYPE filetype is table of var2%type index by binary_integer ;
    file filetype;


    BEGIN
    OPEN curs2(var1.arinvt_id);
    Loop
    FETCH curs2 INTO var2;
    --dbms_output.put_line(var2.qty);
    file(file.last) := var2;
    file.extend;
    EXIT WHEN curs2%NOTFOUND;
    End Loop;
    CLOSE curs2;

    END;
    -----------------------------

    Le curseur2 ainsi que var2 sont valides (j'ai fait le test). Le problème se situe certainement au niveau de l'initialisation de file mais je ne vois vraiment pas comment faire.

    Si quelqu'un voit l'astuce? Merci d'avance!

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Il n'est pas possible d'utiliser la methode Extend pour une collection de type Index By Table
    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
     
    DECLARE
      CURSOR curs2 IS SELECT * FROM emp; 
      var2 curs2%rowtype;
      TYPE filetype is table of var2%type index by binary_integer ; 
      file filetype;
    BEGIN
    OPEN curs2;
    Loop
      FETCH curs2 INTO var2;
      EXIT WHEN curs2%NOTFOUND;
      dbms_output.put_line(var2.empno);
      file(curs2%rowcount) := var2;
      End Loop;
      CLOSE curs2;
    END;
    /

  3. #3
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    Merci de ta réponse mnitu.

    J'avais pas idée qu'il était possible de passer par le curs%rowcount. Cela va surement me servir pour plus tard et je suis sûr que cela va donner des idées à d'autres.

    Cependant....je vais vraiment avoir besoin de la methode ".extend"

    Admettons donc que ma collection file n'est pas du type "Index By Table" mais est bien du type "NESTED TABLE "

    ----------------------------------------
    TYPE filetype IS TABLE of var2%type;
    file filetype;
    ----------------------------------------

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par jafarMUC Voir le message
    ...
    Admettons donc que ma collection file n'est pas du type "Index By Table" mais est bien du type "NESTED TABLE "

    ----------------------------------------
    TYPE filetype IS TABLE of var2%type;
    file filetype;
    ----------------------------------------
    As-tu essayé ?

  5. #5
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Par défaut
    Oui,

    En fait mon programme utilisait à l'origine des "nested table"...mais faire un "collection.extend" ou un "collection.last" sur une table qui n'a pas été initialisée pose problème.

    Apres plusieurs essais j'ai decidé de passer aux "index by tables"...en vain...apres de nombreux test je me suis décidé à poster ma problématique.

    Toute la difficulté réside dans le fait que je souhaite remplir ma collection par la fin (d'où l'utilité du ".last") dans la boucle.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    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
    20
    21
    22
     
    DECLARE
      CURSOR curs2 IS SELECT * FROM emp; 
      var2 curs2%rowtype;
      TYPE filetype IS TABLE of var2%type; 
      file filetype := filetype();
    BEGIN
      OPEN curs2;
      Loop
        FETCH curs2 INTO var2;
        EXIT WHEN curs2%NOTFOUND;
    --    dbms_output.put_line(var2.empno);
        file.extend;
        file(file.count) := var2;
      End Loop;
      CLOSE curs2;
      --
      FOR i IN file.FIRST .. file.LAST  Loop
        dbms_output.put_line(file(i).ename); 
      End Loop;
    END;
    /
    Mais ça pourrait être amélioré.

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

Discussions similaires

  1. Problème de Curseur sur une Collection
    Par mrugala dans le forum PL/SQL
    Réponses: 3
    Dernier message: 26/10/2009, 11h49
  2. Réponses: 2
    Dernier message: 20/02/2008, 16h43
  3. Réponses: 1
    Dernier message: 05/07/2007, 14h48
  4. Réponses: 2
    Dernier message: 06/03/2007, 11h00
  5. BULK COLLECT ==> TYPE TABLE OF (Cursor Rowtype)
    Par argoet dans le forum Oracle
    Réponses: 5
    Dernier message: 17/05/2005, 16h47

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