[plsql] arreter l'execution si exception

Fermé
Avatar - 3 déc. 2009 à 11:22
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 - 5 août 2011 à 12:35
Bonjour,
Comment arreter l'execution d'un programme en plsql lorsqu'une exception (no_data_found pour moi ) est détectée ? Car chez moi ca affiche l'erreur mais continue de s'executer.

2 réponses

Salut

L'exception PL/SQL n'est pas très différente des exceptions des autres langages: soit elle est gérée soit elle remonte à l'appelant.
Si ton programme continue malgré l'exception, c'est qu'un appelant gère l'exception qui vient de remonter

pour vérifier ce que tu crois, protège ton select qui déclenchera ton no_data_found et déclenche dans la foulée une exception perso. Genre:
begin
  select expression into maVar from ... -- va déclencher no_data_found
exception
  when no_data_found then begin
    raise_application_error(-20001, 'NO DATA FOUND in nomModule-nomRequete');
    end;
  when others then begin
    raise_application_error(-20002, 'EXCEPTION in nomModule-nomRequete');
    end;
end;
et en conservant un inventaire rigoureux des exceptions perso

Tu peux agrémenter ton code avec un peu de dbms_output.put_line('message'); si tu travailles avec SQL*Plus (rappel: les messages sont affichés en fin d'exécution à la condition que le texte ne dépasse pas 2000 car je crois)

Sinon, tu peux te créer une table de trace(quand date, ou varchar2(32), quoi varchar2(1024)) que tu alimentes juste avant de déclencher l'exception perso avec
rollback;
insert into myTrace select sysdate, 'nomModule-nomRequete', 'récupération de telle valeur pour faire ceci ou cela' from dual;
commit;
tout en gardant à l'esprit que ce genre de truc n'est pas forcément compatible avec de grosses transactions
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
5 août 2011 à 12:35
0