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-01403 pour les éléments d'une collection Oracle 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-01403 pour les éléments d'une collection Oracle PL/SQL
    'ai une collection déclarée comme ceci :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE TYP_IND_TAB IS TABLE of number INDEX BY binary_integer ;
       tab2 TYP_IND_TAB ;
    je l'initialise avec des éléments d'un bloc qui font 10 chiffres. par



    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
    i:=1
    firsrt_record;
    LOOP
     
    	IF :NUMATTEPAPIER IS NOT NULL  THEN
     
    tab2(i):=:NUMATTEPAPIER ;
     
    	IF (:System.Last_Record = 'TRUE') THEN
     
         EXIT;
      ELSE
         Next_Record;
      END IF;
    i:=+1;
     
    end loop;
    first_record;
    en sortant quand je fais celà pour afficher les éléments



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FOR j IN 1.. tab2.count loop
    message(tab2(j);
    end lop;
    il me signale l'erreur :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01403 : No_data_found.
    D'ou vient le problème d'après vous ?

    vous avez une solution ?

  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
    bonjour,
    dans ton code d'affectation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    i:=1
    firsrt_record;
    LOOP
     	IF :NUMATTEPAPIER IS NOT NULL  THEN
                     tab2(i):=:NUMATTEPAPIER ;
       	         IF (:System.Last_Record = 'TRUE') THEN
                         EXIT;
                    ELSE
                        Next_Record;
                    END IF; 
                 i:=+1;
    end loop;
    first_record;
    il manque le END IF de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF :NUMATTEPAPIER IS NOT NULL  THEN
    Si t'on I:=I+1 est placé aprés, alors dans le cas de :NUMATTEPAPIER à null ,tu vas te retrouver avec un trou dans la numérotation des indice.
    Lors du parcours tu vas te retrouver avec :
    Count = 10
    Max indice=11
    et en parcourant de 1 a 10 il manquera forcement un indice ,d'ou l'erreur

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    L'erreur NO_DATA_FOUND est provoquée lorsque tu essayes d'accéder à un élément de ton tableau qui n'existe pas.

    Par exemple, si lors du parcours de ton bloc, l'item de la ligne 2 est NULL, alors tu ne crées pas tab2(2). Par contre si sur la ligne suivante ce n'est pas NULL, tu crées tab2(3). Du coup, lorsque tu parcours ton tableau, tu essayes d'accéder à tab2(2), ce qui provoque un NO_DATA_FOUND.

    Par ailleurs, si ton item est NULL pour toutes les lignes, ton tableau sera vide et ta boucle j ira de 1 à 0, ce qui ne marchera pas...

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    Ok je vois bien.
    mais j'ai oublié de marquer le 'ENd If' ici mais dans mon code il y'en a bien.

    en fait dans mon cas le :NUMATTEPAPIER n'est jamais null cat l'affectation je le fais seulement si ce champ dans le bloc n'est pas null d'ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    iF : NUMATTEPAPIER is not null then
    end if;
    mais là quand j'ai changé la déclaration du type des éléments par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE  TYP_TAB_A IS TABLE OF attestation_risque. NUMEPAPI  %TYPE ;
       tab2 TYP_TAB_A ;
    car les éléments sont des valeurs de champ


    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
    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;
    alors là j'ai plus l'erreur 01-403 mais plutôt l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-O6533 : Subscript beyont count
    quel est le probléme ?

  5. #5
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    06533, 00000, "Subscript beyond count"
    // *Cause:  An in-limit subscript was greater than the count of a varray
    //          or too large for a nested table.
    // *Action: Check the program logic and explicitly extend if necessary.
    //
    Il me semble que le premier indice doit être 0 et non pas 1.

  6. #6
    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
    Merci de ne pas dupliquer les posts.

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    Ok da'ccord.

    Merci .

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

Discussions similaires

  1. 2012 - Comment compter les éléments d'une collection sans l'initialiser?
    Par domas_24 dans le forum Persistance des données
    Réponses: 3
    Dernier message: 26/04/2012, 10h22
  2. [XQUERY] Lister les éléments d'une collection
    Par kraps dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 13/09/2011, 11h25
  3. Styles différents pour les éléments d'une liste
    Par C_C dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 19/05/2009, 17h15
  4. recupérer les éléments d'une collection et les afficher séparement
    Par ramanov dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/04/2008, 22h10

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