plsql/curseurs poignée d'exception et de retour sur le flux d'exécution
Je suis en train d'exécuter un curseur et souhaitez pour compléter la boucle, même si il ya une exception à la règle.
Ce que j'essaie de faire est "d'attraper" l'exception et probaably journal de quelque chose ou de ne rien faire et ensuite revenir à l'écoulement . Ici est la façon dont le code ressemble à ceci:
FOR line IN my_cursor
LOOP
begin
if<condition> then
GOTO pass;
else
<<do_something>>
exception
when others then
sys.dbms_output.put_line('say something');
end if;
<<pass>> null;
end
END LOOP;
Le script ne marche pas compiler.
Il y a probablement une erreur syntaxique avec l'exception , mais je suis pas au courant de la sémantique très bien. Comme je ne suis pas sûr si vous pouvez revenir en arrière à l'exécution de flux après la manipulation d'une exception.
p.s: Le DB est 10g et il n'y a pas CONTINUER dans il . Donc à l'aide de GOTO.
- Aussi,
if
besoin d'unthen
etend if
. - thnx. C'était une faute de frappe dans la question.
- Pourriez-vous vérifier si l'une des réponses proposées pourraient être qualifiés comme acceptable ? TIA
Vous devez vous connecter pour publier un commentaire.
Mettre le code que vous voulez exécuter à l'intérieur de la boucle dans son propre bloc et ensuite vous pouvez utiliser que des blocs d'exception de la section pour gérer les éventuels problèmes au cours de l'itération de boucle.
Une fois l'exception pour cette itération est manipulé, la prochaine itération de boucle va commencer
par exemple:
Pour illustrer cela, dans l'exemple ci-dessous, j'ai déclaré une variable locale de type exception. Je suis en boucle à travers les chiffres de 1 à 10, au cours de la deuxième itération de boucle, si la déclaration est vraie et le traitement de passe du gestionnaire d'exception. Une fois que l'exception est gérée, la prochaine itération de la boucle commence.
<<do_something>>
doit être exécutée uniquement lorsquecondition
est faux. Pas toujours...<<do_something>>
a toujours été exécutée.exception
bloc ne peut pas s'asseoir à l'intérieur de n'importe quoi sauf unbegin
bloc. Votre question maintenant qu'il est à l'intérieur de laelse
le cadre d'unif
déclaration. Si vous voulez l'exception de là, vous aurez besoin d'unbegin
après laelse
puisexception
au point que vous avez terminé avec tout dans laelse
et enfin unend;
pour fermer labegin
avant laend if
.