2017-02-05 1 views
0

J'essaie de renvoyer la liste des numéros d'une procédure stockée. Ma procédure stockée est arrêtée dans la boucle en cas d'exception. J'ai ajouté une clause d'exception et le contrôle va dans la clause d'exception pour continuer la boucle mais toujours pas de chance. Comment continuer la boucle en cas d'exception?Impossible de continuer la boucle après exception dans la procédure stockée Oracle

Merci.

 CREATE OR REPLACE PROCEDURE getNumber(l_list IN CUSTOMLIST, l_output OUT NUMLIST) 
    IS 
      n_num varchar2(5); 
    BEGIN 
      l_output := NUMLIST(); 

      FOR i IN l_list.FIRST .. l_list.LAST LOOP 
          l_output.EXTEND(l_list.LAST); 
         BEGIN  
         SELECT NUM into n_num 
          FROM sometable WHERE some condition; 

          l_output(i) := n_num; 
          EXCEPTION 
          WHEN NO_DATA_FOUND THEN 
          DBMS_OUTPUT.PUT_LINE('TRUE'); 
          CONTINUE; 
         END; 
      END LOOP; 
END; 
+0

essayez de vérifier votre liste de liste, peut-être qu'il a juste 1 valeur. –

+0

Il a 3 produits. Le premier et le troisième sont vrais et le deuxième est faux. – user2836364

Répondre

0

Le code en question que j'ai posté travaille lorsque je redémarre le développeur SQL. Quelque chose n'allait pas au niveau du développeur SQL lorsque je copiais coller la clause EXCEPTION. Mais quand je tape la clause EXCEPTION, elle commence à montrer l'option be no_data_found et celle que j'ai sélectionnée et qui a fonctionné.

0

Peut-être que vous devriez également gérer d'autres exceptions. Essayez avec l'ajout

WHEN OTHERS THEN 
     [statements] 
+0

Désolé j'ai oublié de mentionner que mon contrôle passe à l'intérieur du bloc d'exception mais l'instruction Continue ne passe pas à la boucle suivante. – user2836364

+0

Il serait beaucoup plus utile si vous pouviez nous montrer exactement quelle information d'erreur vous voyez quand la boucle se termine. Votre utilisation de continuer ci-dessus est entièrement inutile. Il continuera par défaut si vous ne relancez pas l'exception et affichez simplement "true". –

+0

@StevenFeuerstein - Je n'obtenais aucune erreur de données trouvées. Je passe trois items de liste dans lesquels le second item est faux aa par la clause where et je m'attends à continuer la boucle jusqu'au 3ème item et à retourner le 1 er et le 3 ème item mais je ne reçois que le premier item et quitte la boucle. – user2836364