Est-il possible de continuer une boucle à partir d'une exception?
J'ai une extraction d'être exécuté à l'intérieur d'une boucle. Si cette extraction échoue (pas de données) je voudrais CONTINUE
la boucle à l'enregistrement suivant à partir de l'intérieur de la EXCEPTION
.
Est-ce possible?
Je suis un ORA-06550
& PLS-00201 identifer CONTINUE must be declared
DECLARE
v_attr char(88);
CURSOR SELECT_USERS IS
SELECT id FROM USER_TABLE
WHERE USERTYPE = 'X';
BEGIN
FOR user_rec IN SELECT_USERS LOOP
BEGIN
SELECT attr INTO v_attr
FROM ATTRIBUTE_TABLE
WHERE user_id = user_rec.id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- user does not have attribute, continue loop to next record.
CONTINUE;
END;
END LOOP;
END;
source d'informationauteur ProfessionalAmateur
Vous devez vous connecter pour publier un commentaire.
La
CONTINUE
déclaration est une nouvelle fonctionnalité dans 11g.Voici une question: 'CONTINUER' mot-clé dans Oracle 10g, PL/SQL
Dans la construction que vous avez fournis, vous n'avez pas besoin de CONTINUER. Une fois que l'exception est gérée, de l'instruction après la FIN est effectuée, en supposant que votre bloc d'EXCEPTION n'est pas arrêter la procédure. En d'autres termes, il va continuer à la prochaine itération de la user_rec boucle.
Vous devez également SÉLECTIONNER une variable à l'intérieur de votre bloc BEGIN:
Évidemment, vous devez déclarer v_attr ainsi...
Comment au sujet de la ole instruction goto (je sais, je sais, mais il fonctionne très bien ici 😉
Vient de mettre end_loop à la toute fin de la boucle, bien sûr. La valeur null peut être substitué avec un commit ou peut-être un compteur d'incrémentation peut-être, à vous de voir.
Pour cet exemple, vous devriez vraiment juste utiliser une jointure externe.
Avis vous pouvez utiliser
WHEN exception THEN NULL
de la même manière que vous utiliseriezWHEN exception THEN continue
. Exemple: