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

PL/SQL Oracle Discussion :

exceptions plsql dans les sous blocs


Sujet :

PL/SQL Oracle

  1. #1
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut exceptions plsql dans les sous blocs
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    create or replace procedure test(nb integer:=0)
    is
    UneException Exception;
    UneAutreException Exception;
    UneExceptionExceptionnelle Exception;
    begin
      if nb=0 then
        raise UneException;
      end if;
      begin 
        if nb=10 then
        raise UneAutreException;
        elsif nb=20 then
          raise UneExceptionExceptionnelle;
        else
          dbms_output.put_line('sous bloc OK');
        end if;
        exception
          when UneAutreException then
            raise_application_error(-20001, 'UneAutreException s''est déclenchée');
        end;
      dbms_output.put_line('bloc principal OK');  
    exception
          when UneException then
            raise_application_error(-20002, 'UneException s''est déclenchée');
          when UneExceptionExceptionnelle then
            raise_application_error(-20003, 'UneExceptionExceptionnelle s''est déclenchée');
          when others then
            raise_application_error(-20999, 'Erreur inconnue');
    end;
    ma question :
    pourquoi en passant 10 en paramètre lors de l'exécution, l'exception UneAutreExcepion ne se déclenche-t-elle pas dans le sous bloc et que c'est l'exception other du bloc principal qui se déclenche ?
    Quand j'exécute ave 20, Une ExceptionExceptionnelle se déclenche bien.
    Je pensais qu'on pouvait déclencher des exceptions dans un sous bloc.
    Merci bonne soirée

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Citation Envoyé par r83
    pourquoi en passant 10 en paramètre lors de l'exécution, l'exception UneAutreExcepion ne se déclenche-t-elle pas dans le sous bloc et que c'est l'exception other du bloc principal qui se déclenche ?
    Ben ça parait logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      begin 
        if nb=10 then
        raise UneAutreException;
        exception
         when UneAutreException then  => 1.Interception UneAutreException
            raise_application_error(-20001, 'UneAutreException s''est déclenchée');
    => 2. envoi l'erreur -20001 au bloc d'au dessus 
    (et non plus UneAutreException qui n'existe plus) 
        end;
          exception when UneException then xxxx
          when UneExceptionExceptionnelle then  xxx
          when others then => 3.Tout sauf UneException  et 
     UneExceptionExceptionnelle  donc raise
        raise_application_error(-20999, 'Erreur inconnue');
    end;
    Citation Envoyé par r83
    Quand j'exécute ave 20, Une ExceptionExceptionnelle se déclenche bien.
    Je pensais qu'on pouvait déclencher des exceptions dans un sous bloc.
    Merci bonne soirée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    begin
       begin 
        if nb=20 then
          raise UneExceptionExceptionnelle;
        else
          dbms_output.put_line('sous bloc OK');
        end if;
        exception
          when UneAutreException then
            raise_application_error(-20001, 'UneAutreException s''est déclenchée');
        1.  il n'y a pas de when others then null pour annuler l'exception. 
    Donc elle existe toujours sous sa forme d'origine, 
    donc elle remonte au bloc d'au dessus
        end;
    exception
          when UneExceptionExceptionnelle then 
            raise_application_error(-20003, 'UneExceptionExceptionnelle s''est déclenchée'); 
    => 2. Voici UneExceptionExceptionnelle qui remonte du sous bloc
          when others then
            raise_application_error(-20999, 'Erreur inconnue');
    end;

  3. #3
    r83
    r83 est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Points : 86
    Points
    86
    Par défaut exceptions plsql dans les sous blocs
    Merci pour la réponse, c'est logique ...
    Donc si je veux que le bloc continue après avoir levé l'exception, je dois tout faire sauf raise_application_error !!!
    Sur la réponse, je crois deviner que l'on peut faire when others sauf -20001 ?
    quelle est la syntaxe ?
    Merci beaucoup !
    BR

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut ,

    Dans la clause exception when others on peut utiliser :

    sqlcode et sqlerrm

    Donc il suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .
     
    when others  then 
    if sqlcode<>-20001 then
    .
    end if;

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2006, 10h53
  2. [visibilité] Nouveaux Messages dans les sous Forum
    Par Maxoo dans le forum Evolutions du club
    Réponses: 13
    Dernier message: 03/07/2006, 10h35
  3. Calcul dans les sous-formulaires
    Par rafa55 dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 10h37
  4. se ballader dans les sous repertoires
    Par Krispy dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2006, 15h46
  5. [IB 6, FireBird 1.5] SKIP dans les sous-requêtes
    Par Magnus dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/09/2005, 14h14

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