La sortie de l'exécution lorsque l'erreur se produit PL/SQL
Je voudrais savoir, comment puis-je sortir de l'exécution lorsqu'une erreur se produit. Dans Microsoft SQL Server il y a un RETURN
clause, qui fait le travail. Mais je voudrais savoir une fonctionnalité similaire dans Oracle. Je suis à l'aide de Oracle Sql Developer. Voici le script que j'utilise:
Premier bloc déclenche une erreur due à la Clé Unique de la Violation, même si elle déclenche une erreur à l'exécution passe à bloc suivant et exécute l'instruction insert. Je veux mettre fin à l'exécution ou à la sortie, au premier bloc de code lui-même.
Merci de m'aider à écrire le code.
Premier anonyme PL/SQL bloc:
set serveroutput on;
BEGIN
insert into test values(1);
insert into test values(1);
COMMIT;
dbms_output.put_line('PRINT SOMETHING 1');
EXCEPTION
WHEN OTHERS THEN
if sqlcode <> 0
then
dbms_output.put_line(SQLCODE || ' ' || SQLERRM);
RAISE;
end if;
return;
END;
/
Deuxième anonyme PL/SQL bloc:
set serveroutput on;
BEGIN
insert into test values(6);
COMMIT;
dbms_output.put_line('PRINT SOMETHING');
EXCEPTION
WHEN OTHERS THEN
if sqlcode <> 0
then
dbms_output.put_line(SQLCODE || ' ' || SQLERRM);
RAISE;
end if;
return;
END;
/
OriginalL'auteur user3311382 | 2014-02-14
Vous devez vous connecter pour publier un commentaire.
Si vous créez une procédure stockée, vous avez plus de contrôle et peut quitter quand vous le souhaitez avec une instruction de retour.
Donc créer une procédure stockée:
Puis dans sqlplus ou développeur:
OriginalL'auteur Brian McGinity
Vous pouvez imbriquer les blocs en un seul " programme de l'unité.
De cette façon, une exception dans le premier bloc d'arrêter l'ensemble du programme de l'unité d'exécution, plutôt que de n'être que de portée limitée au premier bloc.
OriginalL'auteur Gary Myers
Vous devriez être en mesure d'utiliser la "sortie" - voir la documentation d'Oracle ici: http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12023.htm
Noter que ce sera la fin de votre SqlPlus session, mais je ne connais pas d'autre façon de faire part en utilisant un bloc ou d'une procédure stockée.
Une autre déclaration utile est:
Documentation Oracle: http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12052.htm
OriginalL'auteur JoshL
Merci pour vos précieux commentaires.
JoshL, j'ai essayé d'utiliser la SORTIE, mais je suis finir avec l'erreur. Merci de corriger mon code( je suis nouveau sur le PL/SQL). "CHAQUE fois que la fonction SQLERROR SORTIE" est bon à utiliser, mais mon problème est que j'utilise sql scriptsd dans InstallShield, donc InstallShield installateurs de ne pas reconnaître ces états et déclenche une erreur.
OriginalL'auteur user3311382
La SORTIE de commande est uniquement pour une utilisation à l'intérieur d'une boucle en PL/SQL. La commande EXIT permet de quitter la boucle. Si vous utilisez la commande de SORTIE à l'extérieur d'une boucle en PL/SQL le compilateur génère une erreur.
La SORTIE de la commande dans SQLPlus quitte le SQLPlus de session.
Ceci est source de confusion, parce qu'ils sont deux différents produits Oracle. SQL*Plus peut fonctionner PL/SQL et l'instruction EXIT déclaration est valable dans les deux produits, mais avec des contextes différents.
OriginalL'auteur TonyK