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 :

Fonction qui ne rentre pas dans un IF


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Fonction qui ne rentre pas dans un IF
    Bonjour,

    J' ai un souci au niveau de ma fonction. En effet, je voudrai que si "num" ne récupère rien alors qu'il insère la valeur 404.

    Cependant, en effectuant des tests, je constate que ma fonction ne rentre pas dans le IF et m'insère donc un null à la place '404'...

    Si vous pouviez m'éclairer, j'en serai reconnaissant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION SERV2NUM (lib in varchar2)
    RETURN VARCHAR2 IS num VARCHAR2(1024)  ;
     
    BEGIN
     
    SELECT NOSER INTO num FROM rdv.bran_service  WHERE upper(trim(LIBELLE)) =  upper(trim(lib));
     
    IF num IS  NULL 
        THEN return '404'; 
    ELSE return num;
    END IF;
     
    END SERV2NUM; /
    Merci d'avance !

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    2 possibilités :

    1) Ou bien le NOSER existe mais possède une valeur nulle et à ce moment c'est bien le test IS NULL qu'il faut appliquer.

    2) Ou bien, et je pense que cela correspond à votre cas, il n'y a pas de valeur NOSER pour la condition et à ce moment une exception NO_DATA_FOUND est levée , il faut donc la catcher dans un bloc adéquate.



    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 SERV2NUM (lib IN varchar2)
    RETURN VARCHAR2 IS num VARCHAR2(1024)  ;
     
    BEGIN
     
      SELECT NOSER 
      INTO num 
      FROM rdv.bran_service  
      WHERE upper(trim(LIBELLE)) =  upper(trim(lib));
     
      RETURN num;
     
    EXCEPTION
        WHEN NO_DATA_FOUND THEN 
        RETURN '404'; 
    END SERV2NUM; 
    /

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [RESOLU] Fonction qui ne rentre pas dans un IF
    Merci !

    Effectivement, lever l'exception était la solution à mon problème
    Mais pourquoi je n'y avais pas pensé plus tôt !!!??

    Merci encore !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Il faudrait mettre un agrégat au niveau du select noser, dès lors que vous allez avoir deux lignes avec le même libellé (aux majuscules et trim près) la fonction va planter.

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Il faudrait mettre un agrégat au niveau du select noser, dès lors que vous allez avoir deux lignes avec le même libellé (aux majuscules et trim près) la fonction va planter.
    Ou alors TOO_MANY_ROWS

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/10/2011, 13h53
  2. Sortir d'un while qui n'est pas dans la fonction
    Par NoIdea dans le forum Débuter
    Réponses: 23
    Dernier message: 15/07/2010, 17h38
  3. ne rentre pas dans la fonction
    Par gilles974 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 08/06/2009, 16h39
  4. IE ne rentre pas dans ma fonction Javascript
    Par akrogames dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/10/2008, 22h34
  5. Ma page ne rentre pas dans la fonction Page_Load
    Par Titi41 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 30/05/2008, 15h09

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