Hello tout le monde,


J'ai un bloc anonyme dans un fichier .SQL appelé par SQL*Plus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
begin
@ma_procedure;
end;
/
Je souhaiterai jeter une exception de la procédure ma_procedure et l'intercepter dans le bloc anonyme.

Avec deux procédures stockées dans un même package et l'exception déclarée dans l'entête, les deux procédures reconnaissent l'exception commune, comme on peut le voir ici :
http://www.adp-gmbh.ch/ora/plsql/exception.html

J'ai testé à tout hasard :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE PROCEDURE ma_procedure IS
    CODE_RETOUR_EXCEPTION EXCEPTION;
BEGIN
    raise CODE_RETOUR_EXCEPTION;
EXCEPTION 
    when CODE_RETOUR_EXCEPTION then
         DBMS_OUTPUT.PUT_LINE ('code retour 1');
   when OTHERS then
         raise;
END;
Puis ai appelé la procédure avec mon bloc anonyme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
DECLARE
    CODE_RETOUR_EXCEPTION EXCEPTION;
BEGIN
@ma_procedure;
EXCEPTION
   when CODE_RETOUR_EXCEPTION then
         DBMS_OUTPUT.PUT_LINE ('code retour 2');          
   when OTHERS then
         DBMS_OUTPUT.PUT_LINE ('code retour 3');
end;
Mais bien sûr, donc mon bloc anonyme, je ne tombe pas dans les exceptions.
Ce qui est normal car l'exception CODE_RETOUR_EXCEPTION n'est pas commune au bloc anonyme et à la procédure stockée

Dans ce cas, comment faire pour jeter l'exception d'une procédure à un bloc anonyme ?