40 votes

'CONTINUER' mot-clé dans Oracle 10g, PL/SQL

Je suis à la migration d'un TSQL procédure stockée PL/SQL et avez rencontré un problème - le manque de POURSUIVRE mot-clé dans Oracle 10g.

J'ai lu que Oracle 11g a ce qu'une nouvelle fonctionnalité, mais la mise à niveau n'est pas une option, malheureusement.

Est-il une alternative pour CONTINUER à 10g? Je ne crois pas que c'est pratique pour restructurer la logique de la SP pour contourner ce problème, parce que j'ai une boucle externe, un SI un SI imbriquées, puis CONTINUER à la fin d'un bloc d'instructions à l'intérieur que SI.

Toute aide serait grandement appréciée, merci.

58voto

jop Points 31978

Vous pouvez simuler un continuer à utiliser goto et labels.

DECLARE
   done  BOOLEAN;
BEGIN
   FOR i IN 1..50 LOOP
      IF done THEN
         GOTO end_loop;
      END IF;
   <<end_loop>>  -- not allowed unless an executable statement follows
   NULL; -- add NULL statement to avoid error
   END LOOP;  -- raises an error without the previous NULL
END;

7voto

SRO Points 1956

En fait, PL SQL ne avoir quelque chose pour remplacer CONTINUER. Tout ce que vous avez à faire est d'ajouter une étiquette (un nom) de la boucle :

declare
   i integer;
begin
   i := 0;

   <<My_Small_Loop>>loop

      i := i + 1;
      if i <= 3 then goto My_Small_Loop; end if; -- => means continue

      exit;

   end loop;
end;

5voto

Dilshod Tadjibaev Points 951

Il n'est pas disponible dans 10g, cependant, il est une nouvelle fonctionnalité dans 11G

4voto

cagcowboy Points 13721

Pouvez-vous refactoriser l'IFs dans une fonction, de retour à l'endroit approprié (plus tôt si nécessaire). Ensuite, le flux de contrôle allons chercher dans la boucle, à la bonne place.

Cela fait-il sens?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X