[plsql] arreter l'execution si exception
Avatar
-
DROE Messages postés 148 Date d'inscription Statut Membre Dernière intervention -
DROE Messages postés 148 Date d'inscription Statut Membre Dernière intervention -
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
- Le service spouleur d'impression local n'est pas en cours d'exécution - Guide
- Arreter les pub sur youtube - Accueil - Streaming
- Erreur d'application : une exception côté client s'est produite (consultez la console du navigateur pour plus d'informations). - Forum Google Chrome
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : chaque paragraphe doit être espacé de 0,42 cm ou 12 pt du paragraphe qui suit les textes ne doivent pas être en retrait à droite et à gauche après ces modifications, sur quelle page se trouve le titre « la cheminée » dans le chapitre « informations diverses » ? ✓ - 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
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