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 :

Exception


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut Exception
    Bonjour,
    je voudrais quelques renseignements concernant la ges tion des exceptions.
    J'ai un programme et je voudrais savoir quand ce déclenche tel ou tel exception suivant l'endroit où elle est placé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
    23
    24
    25
     
        PROCEDURE procIS
     
      Num number;
      variable  table%rowtype;
      i number;
     
      BEGIN
        i:=0;
        FOR c IN (SELECT col2 FROM table)
        LOOP
    	BEGIN
    	  i:=i+1;
    	  SELECT numero INTO Num FROM table2 WHERE col1 = c.col2;
    	 SELECT * into variable
    	  FROM tabe3
    	  WHERE col3=Num
    	  EXCEPTION
    	  WHEN NO_DATA_FOUND THEN
    	  Num_person:=null;
    	  contact.hipor:=1;
    	END;
    END LOOP;
    	dbms_output.put_line(i);
      END;
    Je voudrais savoir comment fonctionne l'exception ci dessus.
    Cela veut dire que si mes 2 selects ne renvoient pas d'erreur alors il y a l'exception?
    si je veut une exception pour chaque select, l'esxception ci dessus est correcte?

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Les exceptions fonctionnent par bloc PL/SQL: c'est toujours le traitement d'exception (qui commence par les mots clés EXCEPTION WHEN) associé au bloc courant (là où l'exception est levée) qui est considéré lorsqu'une exception est levée.

    Le moteur PL/SQL lève une exception pour chaque erreur rencontrée.
    Lorsque l'exception est levée, le code PL/SQL s'interrompt et le premier traitement d'exception est exécuté si sa clause WHEN correspond à l'exception levée; Il n'y a jamais retour à l'instruction qui a provoquée l'erreur.

    Un SELECT INTO génère une exception NO_DATA_FOUND s'il n'y a pas de données retournée par le SELECT.


    Dans ton cas, si 1 des 2 SELECT ne retourne pas de données, tes 2 affectations seront executées:

    Num_person:=null;
    contact.hipor:=1;

    et le code continuera de s'exécuter au bloc de niveau supérieur, càd à: END LOOP.[/code]

  3. #3
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Dans votre cas, l'exception sera levée si l'un ou l'autre des 2 select ne ramène aucune ligne.
    Si vous voulez les gérer séparément, il faut les encadrer tous les 2 dans un bloc Begin ... Exception ... End ;

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    voir aussi sur ce site le document http://sheikyerbouti.developpez.com/...age=Chap1#L1.3

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Ok merci beaucoup

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

Discussions similaires

  1. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 18h48
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 16h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 15h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 16h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 15h11

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