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 :

Reprise d'une boucle après une exception


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Par défaut Reprise d'une boucle après une exception
    Bonjour,

    J'ai un petit souci avec une fonction écrite pour mettre à jour une table.

    J'ai un ensemble de ligne à traiter, je boucle donc sur ces lignes, si une erreur existe, je passe à la ligne suivante.

    Le problème est :
    Quand je vérifie que ma ligne courante est valide, si une exception est lancée je voudrais quand même poursuivre mon traitement à la ligne suivante.

    Mon code est du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FOR ma_ligne IN lignes LOOP
         if ma_fonction(ma_ligne.attribut1) = 0
               dbms_output.put_line('Erreur')
         else
               update ma_table
    END LOOP
    avec la fonction ma_fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FUNCTION ma_fonction(x IN varchar2) RETURN number AS
       nb   number;
    begin
       nb := to_number(x);
       RETURN 1;
    exception
       when others then
          RETURN 0;
    end;
    (en gros une fonction qui teste si une chaine est bien un entier)

    Donc lorsque l'attribut n'est pas un entier, j'ai une exception, ça me retourne 0 mais en gros l'exécution du FOR s'arrête
    (si je rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exception
       when others then
              dbms_output.put_line('Erreur')
    après le END LOOP je récupère bien l'exception, mais je voudrais retourner dans ma boucle)

    Voilà je ne sais pas si c'est clair...

    Merci de votre aide,

  2. #2
    Expert confirmé
    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
    Par défaut
    Il faut ajouter un bloc Begin ... Exception ... End à l'intérieur de la boucle.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Par défaut
    tout simplement....

    Merci de ton aide, j'avais déjà un begin - end autour de la boucle, j'avais pas pensé à en remettre un dans la boucle

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

Discussions similaires

  1. Utilisation d'une boucle dans une boucle
    Par caramon _majere dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2014, 21h37
  2. Passer d'une boucle FOR à une boucle WHILE
    Par mohsenuss91 dans le forum Langage
    Réponses: 6
    Dernier message: 01/05/2011, 14h54
  3. [XL-2003] faire une boucle dans une boucle VBA
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/04/2010, 15h06
  4. [PHP 5.0] Manipulation XML une boucle dans une boucle
    Par lepotier dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2010, 12h15
  5. Réponses: 0
    Dernier message: 30/09/2009, 18h42

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