Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 14h00   #1
Invité de passage
 
Homme Stan
Étudiant
Inscription : septembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Stan
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2011
Messages : 4
Points : 0
Points : 0
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 :
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 !
stanouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h10   #2
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
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 :
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; 
/
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h20   #3
Invité de passage
 
Homme Stan
Étudiant
Inscription : septembre 2011
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Stan
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2011
Messages : 4
Points : 0
Points : 0
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 !
stanouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h37   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 15h12   #5
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
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
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h23.


 
 
 
 
Partenaires

Hébergement Web