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

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    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 éminent sénior 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
    Points : 11 252
    Points
    11 252
    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
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    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 éminent sénior 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
    Points : 11 252
    Points
    11 252
    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
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    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 éminent sénior 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
    Points : 11 252
    Points
    11 252
    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é.

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous pouvez savoir si une NESTED TABLE n'est pas initialisé en utilisant la fonction IS NULL.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut PROBLEME RESOLU
    Merci pour vos réponses,

    Je m'en suis sorti avec "collection.count" et "BULK COLLECT INTO" pour finallement laissé tomber le "collection.extend". Je suis donc repassé à des "index by table".

    J'ai réussi à m'en sortir avec

    FETCH curs2 BULK COLLECT INTO file;
    puis reperer l'indice avec "collection(collection.count +1)".

    Merci encore d'avoir passé du temps sur ma problématique.

+ 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