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 :

Requête select into qui ne retourne rien


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut Requête select into qui ne retourne rien
    Bonjour à tous !

    Je suis en train de devenir fou... je ne comprends pas ce qu'il se passe dans mon code, c'est très bizarre. Je suis sur une 10.2g

    Voici le dit code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace
    FUNCTION get_comid(cp VARCHAR2,ville VARCHAR2,pays VARCHAR2)
    RETURN number
    AS result number;
    BEGIN
    select champ_a into result from matable...
    if result is not null then
      result := 10;
    else
      result := 20;
    end if;
    RETURN result;
    END;
    Jusque la tout va bien. Ma requete me retourne soit une ligne, soit rien.
    Et niveau résultat, j'ai soit 10 soit null... alors que je devrais logiquement avoir 10 ou 20 et dans aucun cas je devrais avoir null.

    Le problème n'est pas vraiment de retourner 20 mais dans le cas ou je n'ai pas de résultat a la première requete, il faut que j'en fasse une autre mais j'ai remarqué que je ne passais jamais dans le "else"

    Je patoge... Merci de votre aide !

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par madevilts Voir le message
    ...
    Jusque la tout va bien. Ma requete me retourne soit une ligne, soit rien.
    Et niveau résultat, j'ai soit 10 soit null... alors que je devrais logiquement avoir 10 ou 20 et dans aucun cas je devrais avoir null.
    ...
    Quand ta requête ne retourne rien alors il y l’exception NO_DATA_FOUND qui est levée.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    J'ai bien vu cela mais je n'arrive pas à la mettre en place.

    En fait, ça sort a cause de l'exception et du coup le if n'est pas exécuté c'est ça ?

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par madevilts Voir le message
    ...En fait, ça sort a cause de l'exception et du coup le if n'est pas exécuté c'est ça ?
    Voilà.

  5. #5
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Tu dois traiter les erreurs (dans le bloc EXCEPTION) pour que ton programme sache quoi faire en cas d'erreur, sinon ton programme est interrompu.
    regardes ici ou .
    "Celui qui reconnaît consciemment ses limites est le plus proche de la perfection." Johann Wolfgang

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 69
    Points : 74
    Points
    74
    Par défaut
    Bonjour

    Je débute en PL/SQL donc ne m'en veuillez pas si je dis nimp mais si j'ai bien compris ton problème il te suffit d'utiliser les exceptions comme le dis rvfranck de la façon suivante:

    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
     
    CREATE OR REPLACE
    FUNCTION get_comid(cp VARCHAR2,ville VARCHAR2,pays VARCHAR2)
    RETURN number
    AS result number;
    BEGIN
    SELECT champ_a INTO result FROM matable...
    IF result IS NOT NULL then
      result := 10;
    RETURN result;
    end IF;
    EXCEPTION
    When NO_DATA_FOUND  then 
      result :=20;
    RETURN result;
    END;
    J'espere que ca pourra t'aider..

  7. #7
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Mieux avec un seul RETURN :
    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
     
    CREATE OR REPLACE FUNCTION get_comid (cp      IN VARCHAR2,
                                          ville    IN VARCHAR2,
                                          pays     IN VARCHAR2)
       RETURN number
    AS
       result   number;
    BEGIN
       .....
       BEGIN
          SELECT   10 INTO result FROM matable...;
       EXCEPTION
          WHEN NO_DATA_FOUND
          THEN
             result := 20;
       END;
       RETURN result;
    END;
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

Discussions similaires

  1. [Toutes versions] Requête SQL avec VBA qui ne retourne rien
    Par Roums dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/01/2011, 10h37
  2. [ODBC] Requète SQL qui ne retourne rien
    Par WebManiaK dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/01/2009, 14h33
  3. Select qui ne retourne rien
    Par hunter001 dans le forum SQL
    Réponses: 2
    Dernier message: 12/06/2007, 11h37
  4. [MySQL] Requête qui ne retourne rien
    Par baleiney dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2006, 18h29
  5. SELECT qui ne retourne rien à cause d'anti-slash
    Par mikyfpc dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2005, 23h04

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