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 :

Methode count d'une variable de type collection


Sujet :

PL/SQL Oracle

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut Methode count d'une variable de type collection
    Bonjour,

    J'utilise une collection dans une boucle pour compter le nombre de valeurs d'un champ du bloc.
    Mais à la sortie quand j'utilise la méthode count pour afficher le nombre total d'éléments de la collection, il m'affiche un nombre erroné.
    :NUMATTEPAPIER est le champ d'une ligne du bloc où je stocke les valeurs.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    declare 
        TYPE  TYP_TAB_A IS TABLE OF attestation_risque.NUMEPAPI %TYPE ;
        tab2 TYP_TAB_A ;
         msg varchar2(50) :='';
         i  number(1):=1;
     
    BEGIN
      tab2:= 	TYP_TAB_A();
      first_record;
    LOOP
     
    IF :NUMATTEPAPIER is not null  THEN
     
    	   tab2.EXTEND(i);
        	   tab2(i):= :NUMATTEPAPIER  ;
     
     END IF;
     
    	IF (:System.Last_Record = 'TRUE') THEN
     
         EXIT;
      ELSE
         Next_Record;
         i:=i+1;
     
      END IF;
     
    END LOOP;
     
    FOR i IN tab2.FIRST .. tab2.LAST loop
               IF tab2.EXISTS(i) then
               msg:=msg || (tab2(i));
     
               end if;
               end loop;
     
    message ('Nombre d'éléments  :' || tab2.count);
    Quand je ne remplis que trois lignes, il m'affiche :
    Nombre d'éléments : 6

    D'où est le problème selon vous ?
    Merci pour de l'aide.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Vérifie la doc !
    * EXTEND(n)
    n éléments NULL sont ajoutés à la collection
    Comme je l'ai dit dans un autre post, la déclaration avec INDEX BY BINARY INTEGER t'évite de passer par des extend et des initialisations.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    D'accord je vois.
    mais est ce qu'on peut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYP_TAB_A IS TABLE OF number(10) INDEX BY BINARY_INTEGER;
    ?
    puisque les valeurs que je stocke dans la collection sont déclarés au niveau de la table par : number(10);

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par McM Voir le message
    Comme je l'ai dit dans un autre post, la déclaration avec INDEX BY BINARY INTEGER t'évite de passer par des extend et des initialisations.
    Petite remarque au passage. Cette modification de déclaration change du tout au tout la nature du type !
    Dans le code initial, il s'agit d'une collection SQL (nested table) utilisable en SQL et PL/SQL
    La, il s'agit d'une collection PL/SQL uniquement utilisable en PL/SQL.

    De plus, ces deux types de collections sont de nature différentes et des comportement différents.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/06/2012, 16h07
  2. Réponses: 1
    Dernier message: 21/12/2005, 19h08
  3. Réponses: 3
    Dernier message: 28/07/2005, 21h30
  4. affecter une variable de type stringstream
    Par sorari dans le forum SL & STL
    Réponses: 3
    Dernier message: 24/03/2005, 11h14
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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