IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[PLSQL][Exception]Utilisation d'OTHERS


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut [PLSQL][Exception]Utilisation d'OTHERS
    Bonjour,
    j'ai une question triviale qui concerne l'utilisation à outrance, dans la clause exception, de l'exception OTHERS au sein de script PLSQL applicatif.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
     Traitement applicatif
     ...
     EXCEPTION
      WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(My_Exception,'Echec ...');
    END;
    J'ai le sentiment que cette approche est discutable mais j'ai un peu de mal à argumenter contre cette maniére de faire étant donné que ça marche ainsi !

    A votre avis cela pose un probléme ou pas de ne pas spécifier précisément les cas d'erreurs ?

    Quels sont les impacts que peut avoir la déclaration de 5 exceptions applicative au sein d'un package ?

    Merci.

    PS
    Au cas où je précise qu'il s'agit d'une question sérieuse et pas d'un troll.

  2. #2
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    A outrance bien sûr que c'est litigieux, car cela veut dire que dans tous les cas d'exception on arrête le processus.
    Dans certains cas, une exception doit être traitée en silence et elle ne doit pas se propager aux blocs englobants.
    La bonne pratique est de traiter l'exception qui a un sens pour l'application dans le context du bloc dans lequel l'erreur se produit.
    .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Par défaut
    Tout code PL/SQL qui sort de mon équipe doit avoir une gestion d'erreur.
    Nous insérons le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        EXCEPTION
           WHEN OTHERS THEN
              Gestion_erreur('Erreur dans Fct_lire_ext, code: '||SQLCODE||' - message: '||SQLERRM);
    La procédure de gestion d'erreur log dans une table le message et quelques informations supplémentaires selon le programme exécuté et arrête le traitement.

    Ça permet à la personne qui s'occupe d'exécuter les traitements d'avoir une façon uniforme de gestion d'erreur.

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    On n'a pas toujours la maîtrise de l'ensemble des exceptions qui peuvent être levées dans un bloc PL/SQL (y compris celles auxquelles on ne pense jamais comme les erreurs système).

    Comme il est convenu que toute erreur doit avoir une gestion dans un bloc PL/SQL, WHEN-OTHERS est bien pratique pour trapper les centaines d'erreurs imprévues et ne pas forcément "planter" le programme.

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Merci.
    Si j'ai bien compris, ce bloc ne doit être utilisé que pour des exceptions imprévues ce qui implique que l'on ne doit pas y gérer des erreurs applicative.

    Ce qui me gêne c'est que si chaque procédure posséde un bloc de ce type, la propagation de l'exception, lors d'appels imbriqués, me rammeneras la derniére rencontrée.

    Et si j'utilise le paramètre True, pour récupérer 'l'historique' des exceptions déclenchées, la zone mémoire (pile d'appel ?) peut-elle être rapidement saturée ?

  6. #6
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    ce bloc ne doit être utilisé que pour des exceptions imprévues ce qui implique que l'on ne doit pas y gérer des erreurs applicative
    L'exception others sert effectivement à gérer tous les autres cas d'erreurs non programmées, mais elle n'est pas obligatoire, dans ce cas l'exception se propage.
    la propagation de l'exception, lors d'appels imbriqués, me rammeneras la derniére rencontrée
    Une exception est propagée si elle n'est pas traité dans le bloc, les blocs englobants et ainsi de suite. Dans ton cas, tu trappes l'exception dans la cause others et relèves une exception applicative avec RAISE_APPLICATION_ERROR. Les exceptions sont différentes. A la place, tu peut relever l'exception avec l'instruction RAISE toute seule.
    Et si j'utilise le paramètre True, pour récupérer 'l'historique' des exceptions déclenchées
    En rapport avec ma dernière remarque, je ne vois pas l'intérêt d'avoir une cascade d'exceptions applicatives suite à une première qui elle est la bonne.
    .

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'utilisation exception 13
    Par chr$stophe dans le forum Assembleur
    Réponses: 2
    Dernier message: 29/11/2005, 17h58
  2. [Struts-Layout] exception quand j'utilise <layout:submit&
    Par jahjah42 dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/11/2005, 11h17
  3. [Exception] de l'utilisation des exceptions...
    Par Alec6 dans le forum Général Java
    Réponses: 7
    Dernier message: 16/09/2005, 17h53
  4. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    Réponses: 11
    Dernier message: 01/12/2004, 02h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo