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,