Oracle des blocs imbriqués et la gestion des exceptions
DECLARE
string_of_5_chars VARCHAR2(5);
BEGIN
BEGIN
string_of_5_chars := 'Steven';
EXCEPTION
WHEN value_error THEN
RAISE no_data_found;
WHEN no_data_found THEN
dbms_output.Put_line ('Inner block');
END;
EXCEPTION
WHEN no_data_found THEN
dbms_output.Put_line ('Outer block');
END;
Réponse dit que la sortie va être Extérieure bloc", quelqu'un Peut-il expliquer pourquoi le bloc interne ne seraient pas exécutés ? Qu'est-ce que l'ordre de préséance des exceptions dans oracle
- Avez-vous essayez de télécharger Oracle Express Edition et SQL Developer (gratuites) et déboguer l'exécution de ce bloc PL/SQL?
Vous devez vous connecter pour publier un commentaire.
Lire ici pour plus d'informations sur imbriquée à l'exception des blocs.
Vous devriez envisager l'exception du bloc LORS de clauses comme étant similaire à la régularité de l'instruction du CAS. Le premier QUAND qui correspond à la condition s'exécute, et le suivant, LORSQUE des clauses que gestionnaire d'exception sont ignorés.
Donc la seconde LORSQUE la clause dans l'intérieur du bloc d'exception n'est pas dans le chemin d'exécution de code à tous, et à l'extérieur bloc exception des captures de la no_data_found erreur déclenchée par la première, LORSQUE la clause de la nested exception.
La propagation d'Exception dans ce scénario est expliqué ici: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/errors.htm#LNPLS00706
Comme
string_of_5_chars := 'Steven';
soulève unevalue_error
, le bloc d'Exception est entré.À l'intérieur du bloc Exception de la
no_data_found
Exception est levée. En raison de l'élévation partie de cette exception sont ensuite traités par la gestion des exceptions de l'extérieur du bloc.Pour plus d'informations, consultez http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/raise_statement.htm