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 :

ORA-06533:Subscript beyond count dans une clollection PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut ORA-06533:Subscript beyond count dans une clollection PL/SQL
    Bonjour,
    je dois utiliser une collection pour stocker les valeurs d'un champ dans un bloc multiligne.
    voici le code que j'utilise.

    attestation_risque. NUMEPAPI est le champ de la base de données qui correspond au champ du bloc NUMATTEPAPIER dont je dois stocker les valeurs.


    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
    declare
      TYPE  TYP_TAB_A IS TABLE OF attestation_risque. NUMEPAPI%TYPE ;
       tab2 TYP_TAB_A ;
    i number(1);
    msg varchar2(200):=' ';
     
    begin
    first_record;
    	i:=1;
    	loop
    	IF :NUMATTEPAPIER IS NOT NULL  THEN
                tab2:= TYP_TAB_A();
                tab2.EXTEND(i);
        	  tab2(i):= :NUMATTEPAPIER  ;
        	    i:=i+1;
     
    END IF;
     
    	IF (:System.Last_Record = 'TRUE') THEN
     
                   EXIT;
      ELSE
                   Next_Record;
      END IF;
     
    end loop;
    first_record;
     
    FOR i IN 1 .. tab2.count Loop
     
        msg := msg || tab2(i);
     
    end;
    mais à l'execution il me signale l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-06533:Subscript beyond count.
    Quel est le problème ?
    une aide SVP

  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
    C'est normal la limitation NUMBER(1) pour i ?

    Ton code ne marche pas bien chez moi en plsql.
    J'ai mis quelques traces.
    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
    DECLARE
      TYPE  TYP_TAB_A IS TABLE OF VARCHAR2(1);
       tab2 TYP_TAB_A ;
    	i number;
    	msg varchar2(200):=' ';
    BEGIN
    	i:=1;
    	FOR k IN 1..10
      LOOP
          tab2:= TYP_TAB_A();
          tab2.EXTEND(i);
      		tab2(i):= CHR(64 + k)  ;
          DBMS_OUTPUT.put_line(k ||':' || tab2(i));
    	    i:=i+1;
    	END LOOP;
    	FOR i IN 1 .. tab2.COUNT
      LOOP
        msg := msg || tab2(i);
     	END LOOP;
      DBMS_OUTPUT.put_line('Total ('|| tab2.COUNT ||') Msg='|| msg);
    END;
     
    1:A
    2:B
    3:C
    4:D
    5:E
    6:F
    7:G
    8:H
    9:I
    10:J
    Total (10) Msg= J
    Tu redéclares tab2:= TYP_TAB_A(); à chaque boucle, donc c'est réinitialisé.

    Pour les collections, le plus simple est cette façon
    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
    DECLARE
      TYPE  TYP_TAB_A IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
       tab2 TYP_TAB_A ;
    	i number;
    	msg varchar2(200):=' ';
    BEGIN
    	i:=1;
    	FOR k IN 1..10
      LOOP
          tab2(i):= CHR(64 + k)  ;
          DBMS_OUTPUT.put_line(k ||':'|| tab2(i));
    	    i:=i+1;
    	END LOOP;
    	FOR i IN 1 .. tab2.COUNT
      LOOP
        msg := msg || tab2(i);
     	END LOOP;
        DBMS_OUTPUT.put_line('Total ('|| tab2.COUNT ||') Msg='|| msg);
    END;
     
    1:A
    2:B
    3:C
    4:D
    5:E
    6:F
    7:G
    8:H
    9:I
    10:J
    Total (10) Msg= ABCDEFGHIJ

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    J'avais mal placé le constructeur d'initialisation . il fallait le sortir hors du boucle.
    Merci.

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

Discussions similaires

  1. [Requete] Deux count dans une requete
    Par wperezrobles dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/10/2006, 09h17
  2. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  3. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  4. COUNT dans une jointure
    Par picsoun dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/04/2006, 20h27
  5. Count dans une vue
    Par gldfdp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 05h55

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