Hello tout le monde,
J'ai un bloc anonyme dans un fichier .SQL appelé par SQL*Plus:
Je souhaiterai jeter une exception de la procédure ma_procedure et l'intercepter dans le bloc anonyme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 begin @ma_procedure; end; /
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 :
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 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;
Mais bien sûr, donc mon bloc anonyme, je ne tombe pas dans les exceptions.
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;
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 ?
Partager