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 :

[Sql] Probleme de recuperation de variable


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Par défaut [Sql] Probleme de recuperation de variable
    Bonjour,
    Je travail sur un Oracle 9.2.0.4
    J'ai un probleme avec un bout de code que je ne comprend (le probleme pas le 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
    procedure toto
    IS
    err varchar2(255):
    BEGIN
      LOOP
        BEGIN
        procedure tata (err)
     
        EXCEPTION ....
           DBMS_OUTPUT.PUT8LINE(err)
        END;
      END LOOP;
    EXCEPTION ......
    END;
    La procedure tata a le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure tata (p_err in out varchar2)
    Is
     ....
    BEGIN
      .......
    EXCEPTION ...
       p_err := 'mon message';
       RAISE;
    END;
    Et bien mon DBMS_OUTPUT n'a pas la valeur 'mon message' dans la procedure toto

    Quelqu'un a une idee ????

    Merci d'avance
    LoKi

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par loki8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure toto
    IS
    err varchar2(255):
    BEGIN
      LOOP
        BEGIN
        procedure tata (err) -- cet appel n'est-il pas incorrect ????
    
        EXCEPTION ....
           DBMS_OUTPUT.PUT8LINE(err)
        END;
      END LOOP;
    EXCEPTION ......
    END;
    Et bien mon DBMS_OUTPUT n'a pas la valeur 'mon message' dans la procedure toto
    D'accord et quelle est sa valeur (peut être serait-il bon que vous nous donniez tout votre code) ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Par défaut
    procedure toto
    IS
    err varchar2(255):
    BEGIN
    LOOP
    BEGIN
    tata (err);
    EXCEPTION ....
    DBMS_OUTPUT.PUT8LINE(err)
    END;
    END LOOP;
    EXCEPTION ......
    END;
    Voila j'ai corrige l'appel de la procedure desole.
    La valeur du message devrait etre 'mon message', car il est sous entendu que la procedure genere une exception.

    LoKi

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par loki8
    La valeur du message devrait etre 'mon message', car il est sous entendu que la procedure genere une exception.
    D'accord mais si vous n'obtenez pas 'mon message', qu'obtenez-vous (aucun message, erreur Oracle, libellé du message d'erreur différent, etc.) ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 49
    Par défaut
    Desole je n'avais pas compris

    La variable est vide.
    Le DBMS_OUTPUT retourne a la ligne.

    LoKi

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    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
    create or replace procedure tata(p_err in out varchar2) is
      trouve number(1);
    begin
      select 1
      into   trouve
      from dual
      where 1=2; -- génère toujours une exception
    exception when no_data_found then
      p_err := 'mon message';
    end;
    /
     
    create or replace procedure toto is
     err varchar2(255);
    begin
      err := 'toto';
      begin
        tata(err);
      exception when no_data_found then
        dbms_output.put_line('EXCEPTION --> err = ' || err);
      end;
      dbms_output.put_line('err = ' || err);
    end;
    /
    produit :
    Procédure créée.


    Procédure créée.

    8i ALEX> exec toto;
    EXCEPTION --> err = toto
    err = toto

    Procédure PL/SQL terminée avec succès.
    Et
    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
    create or replace procedure tata(p_err in out varchar2) is
      trouve number(1);
    begin
      select 1
      into   trouve
      from dual
      where 1=2; -- génère toujours une exception
    exception when no_data_found then
      p_err := 'mon message';
    --  RAISE; -- SEULE DIFFERENCE AVEC LE CODE PRECEDENT !!!!
    end;
    /
     
    create or replace procedure toto is
     err varchar2(255);
    begin
      err := 'toto';
      begin
        tata(err);
      exception when no_data_found then
        dbms_output.put_line('EXCEPTION --> err = ' || err);
      end;
      dbms_output.put_line('err = ' || err);
    end;
    /
    produit cette fois :
    Procédure créée.


    Procédure créée.

    8i ALEX> exec toto;
    err = mon message

    Procédure PL/SQL terminée avec succès.
    J'avoue que je suis un peu étonné de ce comportement mais j'utilise jamais RAISE.
    La doc devrait vous permettre de comprendre la raison.

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

Discussions similaires

  1. Probleme de recuperation de variable
    Par xclam dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2007, 11h55
  2. [WAP et XML] probleme de recuperation de variable
    Par gba_gui dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2007, 10h58
  3. Réponses: 2
    Dernier message: 30/06/2006, 09h07
  4. Réponses: 1
    Dernier message: 22/05/2006, 14h44
  5. [Variable d'environement SQL] Probleme de config
    Par duelooser dans le forum Oracle
    Réponses: 2
    Dernier message: 16/12/2005, 09h16

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