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

Oracle Discussion :

Gestion des excceptions


Sujet :

Oracle

  1. #41
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Quand j'essaies de le creer j'ai le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    0/0      PL/SQL: Compilation unit analysis terminated
    1/30     PLS-00329: le type de niveau schéma comporte une référence non
             valide à CONT.T_ANOMAL

    j'ai utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE OR REPLACE TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE
    est-ce correct ?

  2. #42
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    oui, c'est correct...

    et je pourrais voir la partie du code qui plante ? (aux environs dela ligne 30 il semble)

  3. #43
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Moi je pense que cela n'est pas correct : %rowtype est une commande Pl-Sql .

    Par ailleurs, il me semble également que la commande suivante ne fonctionne qu'à partir de la 9.02 (en 8i, c'est sûr cela ne fonctionne pas => erreur : PLS-00518) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    forall i IN VP_Tabl.first..VP_Tabl.last
        INSERT INTO  T_ANOMAL VALUES VP_Tabl(j);
    Pour les versions antérieures tu es obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in i IN VP_Tabl.first..VP_Tabl.last loop
       insert into T_ANOMAL (col1, col2, ... coln) 
       VALUES (VP_Tabl(j).col1, VP_Tabl(j).col2, ..., VP_Tabl(j).coln); 
    end loop;
    ou créer autant de tableau que tu as de colonnes (le forall ne fonctionne pas sur des tableaux composites)

  4. #44
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    c'est vrai que mes procédures fonctionnent, mais je suis en 9.2.0.6...

    alors essaie peut-être la suggestion de PlaineR et fais un Loop standard pour faire l'insert...

  5. #45
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    En tout cas, je trouve que c'est dommage de glisser d'un problème vers un autre... Il faudrait à mon avis d'abord faire des insertions simples (sans bulk-collect) pour valider que tu tiens la bonne méthode pour tracer des erreurs, puis dans un second temps optimiser par les forall...

  6. #46
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Je n'ai plus d'erreur avec la méthode de plaineR. Il semblerait que ce soit bien un probleme de version (je suis en 9.0.1.3.0)

    for i in i IN VP_Tabl.first..VP_Tabl.last loop
    insert into T_ANOMAL (col1, col2, ... coln)
    VALUES (VP_Tabl(j).col1, VP_Tabl(j).col2, ..., VP_Tabl(j).coln);
    end loop;

    Je fais un test global avant de fermer complètement cette discussion...

  7. #47
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    J'y ai cru l'espace de 20 secondes ...


    J'ai l'erreur suivante à l'execution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ERREUR à la ligne 1 :
    ORA-06531: Référence à un ensemble non initialisé
    ORA-06512: à "CONT.PKG_ERREUR", ligne 237
    ORA-06512: à ligne 1
    Mon tableau est initialisé de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    VP_Tabl(1).R_CODPAT := 'X';
     VP_Tabl(1).R_FICHIER := 'X';
     VP_Tabl(1).R_CHAMPS := 'X';
     VP_Tabl(1).R_CODE_REJET := 'X';
     VP_Tabl(1).R_NATURE_REJET := 'X';
     VP_Tabl(1).R_DATE_REJET := SYSDATE;

  8. #48
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    ne pas oublier, dans la procédure que tu appelles :
    ceci n'est pas l'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    VP_Tabl(1).R_CODPAT := 'X';
     VP_Tabl(1).R_FICHIER := 'X';
     VP_Tabl(1).R_CHAMPS := 'X';
     VP_Tabl(1).R_CODE_REJET := 'X';
     VP_Tabl(1).R_NATURE_REJET := 'X';
     VP_Tabl(1).R_DATE_REJET := SYSDATE;
    tu dois initialiser le tableau avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VP_Tabl     VP_TabType := VP_TabType(NULL);
    AVANT de pouvoir y insérer des valeurs...

  9. #49
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    sans oublier le ".extend" ....

  10. #50
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    ou de déclarer ton tableau de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE index by binary_integer;
    => cela t'évite d'avoir à initialiser ta collection , oracle le gère tout seul

  11. #51
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Attention avec le .extend :

    l'initialisation avec type(NULL); initialise ET ajoute une première ligne vide, prête à acceuillir des valeurs...

    si tu initialise de la sorte, fais un .extend, puis met des valeurs, tu auras 2 lignes dans ton tableau... une vide et une avec tes valeurs... or ce n'est forcément ce que tu veux insérer, sutout si tu as des colonnes NOT NULL !

    si tu fais le .extend en début de procédure ou de loop, il faut d'abord faire un .delete (avant le loop bien sur, pour ne pas vider le tableau à chaque boucle).

  12. #52
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    j'ai ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE index by binary_integer;
    VP_TABL VP_TabType  ;
    puis dans mon traitement avant le loop je fais un
    Puis des qu'il tombe sur une anomalie
    j'appelle ma procédure


    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
     
    PROCEDURE P_ALIM_TABLEAU_ANO (    
    in_PAT IN T_ANOMAL.R_CODPAT%TYPE,
    in_FICH IN T_ANOMAL.R_fichier%TYPE,
    in_CHAMP IN T_ANOMAL.r_champs%TYPE,
    in_CODEREJ IN T_ANOMAL.r_code_rejet%TYPE,
    in_R_NATURE_REJET IN T_ANOMAL.r_nature_rejet%TYPE,
    in_R_DATE IN T_ANOMAL.r_date_rejet%TYPE)
    IS
     
    BEGIN
     
    VP_Tabl(1).R_CODPAT :='1';
    VP_Tabl(1).R_FICHIER :='1';
    VP_Tabl(1).R_CHAMPS := '1';
    VP_Tabl(1).R_CODE_REJET := '1';
    VP_Tabl(1).R_NATURE_REJET := '1';
    VP_Tabl(1).R_DATE_REJET :=SYSDATE;
     
     
        VP_idx := VP_idx + 1 ; -- on incrémente l'INDEX des item
        VP_Tabl.extend ; -- on étend le tableau d'une ligne
     
    INSERT INTO T_ANOMAL VALUES ( in_PAT,in_FICH , in_CHAMP,  in_CODEREJ, in_R_NATURE_REJET, in_R_DATE);
     
    COMMIT;
     
     
        VP_Tabl(VP_idx).R_CODPAT:= in_PAT ;
        VP_Tabl(VP_idx).R_FICHIER:= in_FICH ;
        VP_Tabl(VP_idx).R_CHAMPS:= in_CHAMP;
        VP_Tabl(VP_idx).R_CODE_REJET:= in_CODEREJ;
        VP_Tabl(VP_idx).R_NATURE_REJET:= in_R_NATURE_REJET;
        VP_Tabl(VP_idx).R_DATE_REJET:= in_R_DATE;
    END;
    a la compilation erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLS-00306: numéro ou types d'arguments erronés dans appel à 'EXTEND'

  13. #53
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Quand tu as un tableau "index by binary_indeger", tu n'as plus a géré l'extend, ni l'initialisation de ta collection.


    Par contre je ne comprends pas ce que fait ta procédure ? Tu alimentes le tableau et tu insères en même temps ? Quel est l'intérêt ?

  14. #54
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Non pardon je faisais un test pour savoir qui faisait planter mon traitement...
    voila ce que fait la procedure réellement.

    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
     
    PROCEDURE P_ALIM_TABLEAU_ANO (    
    in_PAT IN T_ANOMAL.R_CODPAT%TYPE,
    in_FICH IN T_ANOMAL.R_fichier%TYPE,
    in_CHAMP IN T_ANOMAL.r_champs%TYPE,
    in_CODEREJ IN T_ANOMAL.r_code_rejet%TYPE,
    in_R_NATURE_REJET IN T_ANOMAL.r_nature_rejet%TYPE,
    in_R_DATE IN T_ANOMAL.r_date_rejet%TYPE)
    IS
     
    BEGIN
     
    VP_Tabl(1).R_CODPAT :='1';
    VP_Tabl(1).R_FICHIER :='1';
    VP_Tabl(1).R_CHAMPS := '1';
    VP_Tabl(1).R_CODE_REJET := '1';
    VP_Tabl(1).R_NATURE_REJET := '1';
    VP_Tabl(1).R_DATE_REJET :=SYSDATE;
     
     
        VP_idx := VP_idx + 1 ; -- on incrémente l'INDEX des item
        VP_Tabl.extend ; -- on étend le tableau d'une ligne
     
        VP_Tabl(VP_idx).R_CODPAT:= in_PAT ;
        VP_Tabl(VP_idx).R_FICHIER:= in_FICH ;
        VP_Tabl(VP_idx).R_CHAMPS:= in_CHAMP;
        VP_Tabl(VP_idx).R_CODE_REJET:= in_CODEREJ;
        VP_Tabl(VP_idx).R_NATURE_REJET:= in_R_NATURE_REJET;
        VP_Tabl(VP_idx).R_DATE_REJET:= in_R_DATE;
    END;

    je ne sais pas si c'est vraiment utile d'initialise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    VP_Tabl(1).R_CODPAT :='1';
    VP_Tabl(1).R_FICHIER :='1';
    VP_Tabl(1).R_CHAMPS := '1';
    VP_Tabl(1).R_CODE_REJET := '1';
    VP_Tabl(1).R_NATURE_REJET := '1';
    VP_Tabl(1).R_DATE_REJET :=SYSDATE;

  15. #55
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Voilà ce que je ferais :
    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
    PROCEDURE P_ALIM_TABLEAU_ANO (    
    in_PAT IN T_ANOMAL.R_CODPAT%TYPE,
    in_FICH IN T_ANOMAL.R_fichier%TYPE,
    in_CHAMP IN T_ANOMAL.r_champs%TYPE,
    in_CODEREJ IN T_ANOMAL.r_code_rejet%TYPE,
    in_R_NATURE_REJET IN T_ANOMAL.r_nature_rejet%TYPE,
    in_R_DATE IN T_ANOMAL.r_date_rejet%TYPE)
    IS
     
    BEGIN
        VP_idx := VP_idx + 1 ; -- on incrémente l'INDEX des item
        VP_Tabl(VP_idx).R_CODPAT:= in_PAT ;
        VP_Tabl(VP_idx).R_FICHIER:= in_FICH ;
        VP_Tabl(VP_idx).R_CHAMPS:= in_CHAMP;
        VP_Tabl(VP_idx).R_CODE_REJET:= in_CODEREJ;
        VP_Tabl(VP_idx).R_NATURE_REJET:= in_R_NATURE_REJET;
        VP_Tabl(VP_idx).R_DATE_REJET:= in_R_DATE;
    END;
    La première partie est non seulement inutile, mais dangereuse : tu écrases les données que tu aurais pu mettre quand vp_idx = 1.

  16. #56
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Mon programme plante sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FOR i IN VP_Tabl.first..VP_Tabl.last LOOP
    avec le message suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur
    comment puis je verifier ce qu'il essaye d'inserer ?

  17. #57
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Ca marche mieux si je remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for i IN VP_Tabl.first..VP_Tabl.last loop
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     FOR i IN 1..VP_Tabl.COUNT LOOP
    Est-ce qq'un sait pourquoi ?

  18. #58
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    finalement ca marche pas mieux

    VP_Tabl.COUNT est toujours = 0 ??!!!

  19. #59
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    oups c'est normal j'ai re-déclaré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VP_Tabl     VP_TabType
    dans ma procedure qui insère les données dans mon tableau

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR i IN VP_Tabl.first..VP_Tabl.last LOOP
    marche en fait tres bien

  20. #60
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    désolé, j'ai un peu lâché l'affaire, j'ai aussi dû traiter un p'tit Bug chez nous...

    on touche au but ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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