[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
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.
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.
A voir également:
- [plsql] arreter l'execution si exception
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : - Guide
- A java exception has occurred ✓ - Forum Minecraft
- Erreur d'execution 1004 ✓ - Forum VB / VBA
- Erreur d'application : une exception côté client s'est produite (consultez la console du navigateur pour plus d'informations). - Forum Google Chrome
- Une exception non gérée s'est produite dans votre application - Forum Word
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:
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
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
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
5 août 2011 à 12:35
Avatar,
Tu peux jeter un oeil ici.
http://www.dba-ora.fr/article-oracle-plsql-no_data_found-too_many_rows-exceptions-74004716.html
Tu peux jeter un oeil ici.
http://www.dba-ora.fr/article-oracle-plsql-no_data_found-too_many_rows-exceptions-74004716.html